106324dcfSchristos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
2ed0d50c3Schristos /* CPU data for fr30.
3ed0d50c3Schristos 
4ed0d50c3Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
5ed0d50c3Schristos 
6*b88e3e88Schristos Copyright (C) 1996-2020 Free Software Foundation, Inc.
7ed0d50c3Schristos 
8ed0d50c3Schristos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9ed0d50c3Schristos 
10ed0d50c3Schristos    This file is free software; you can redistribute it and/or modify
11ed0d50c3Schristos    it under the terms of the GNU General Public License as published by
12ed0d50c3Schristos    the Free Software Foundation; either version 3, or (at your option)
13ed0d50c3Schristos    any later version.
14ed0d50c3Schristos 
15ed0d50c3Schristos    It is distributed in the hope that it will be useful, but WITHOUT
16ed0d50c3Schristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17ed0d50c3Schristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
18ed0d50c3Schristos    License for more details.
19ed0d50c3Schristos 
20ed0d50c3Schristos    You should have received a copy of the GNU General Public License along
21ed0d50c3Schristos    with this program; if not, write to the Free Software Foundation, Inc.,
22ed0d50c3Schristos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23ed0d50c3Schristos 
24ed0d50c3Schristos */
25ed0d50c3Schristos 
26ed0d50c3Schristos #include "sysdep.h"
27ed0d50c3Schristos #include <stdio.h>
28ed0d50c3Schristos #include <stdarg.h>
29ed0d50c3Schristos #include "ansidecl.h"
30ed0d50c3Schristos #include "bfd.h"
31ed0d50c3Schristos #include "symcat.h"
32ed0d50c3Schristos #include "fr30-desc.h"
33ed0d50c3Schristos #include "fr30-opc.h"
34ed0d50c3Schristos #include "opintl.h"
35ed0d50c3Schristos #include "libiberty.h"
36ed0d50c3Schristos #include "xregex.h"
37ed0d50c3Schristos 
38ed0d50c3Schristos /* Attributes.  */
39ed0d50c3Schristos 
40ed0d50c3Schristos static const CGEN_ATTR_ENTRY bool_attr[] =
41ed0d50c3Schristos {
42ed0d50c3Schristos   { "#f", 0 },
43ed0d50c3Schristos   { "#t", 1 },
44ed0d50c3Schristos   { 0, 0 }
45ed0d50c3Schristos };
46ed0d50c3Schristos 
47ed0d50c3Schristos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
48ed0d50c3Schristos {
49ed0d50c3Schristos   { "base", MACH_BASE },
50ed0d50c3Schristos   { "fr30", MACH_FR30 },
51ed0d50c3Schristos   { "max", MACH_MAX },
52ed0d50c3Schristos   { 0, 0 }
53ed0d50c3Schristos };
54ed0d50c3Schristos 
55ed0d50c3Schristos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
56ed0d50c3Schristos {
57ed0d50c3Schristos   { "fr30", ISA_FR30 },
58ed0d50c3Schristos   { "max", ISA_MAX },
59ed0d50c3Schristos   { 0, 0 }
60ed0d50c3Schristos };
61ed0d50c3Schristos 
62ed0d50c3Schristos const CGEN_ATTR_TABLE fr30_cgen_ifield_attr_table[] =
63ed0d50c3Schristos {
64ed0d50c3Schristos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
65ed0d50c3Schristos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
66ed0d50c3Schristos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
67ed0d50c3Schristos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
68ed0d50c3Schristos   { "RESERVED", &bool_attr[0], &bool_attr[0] },
69ed0d50c3Schristos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
70ed0d50c3Schristos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
71ed0d50c3Schristos   { 0, 0, 0 }
72ed0d50c3Schristos };
73ed0d50c3Schristos 
74ed0d50c3Schristos const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] =
75ed0d50c3Schristos {
76ed0d50c3Schristos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
77ed0d50c3Schristos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
78ed0d50c3Schristos   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
79ed0d50c3Schristos   { "PC", &bool_attr[0], &bool_attr[0] },
80ed0d50c3Schristos   { "PROFILE", &bool_attr[0], &bool_attr[0] },
81ed0d50c3Schristos   { 0, 0, 0 }
82ed0d50c3Schristos };
83ed0d50c3Schristos 
84ed0d50c3Schristos const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] =
85ed0d50c3Schristos {
86ed0d50c3Schristos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
87ed0d50c3Schristos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
88ed0d50c3Schristos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
89ed0d50c3Schristos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
90ed0d50c3Schristos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
91ed0d50c3Schristos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
92ed0d50c3Schristos   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
93ed0d50c3Schristos   { "RELAX", &bool_attr[0], &bool_attr[0] },
94ed0d50c3Schristos   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
95ed0d50c3Schristos   { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] },
96ed0d50c3Schristos   { 0, 0, 0 }
97ed0d50c3Schristos };
98ed0d50c3Schristos 
99ed0d50c3Schristos const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] =
100ed0d50c3Schristos {
101ed0d50c3Schristos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
102ed0d50c3Schristos   { "ALIAS", &bool_attr[0], &bool_attr[0] },
103ed0d50c3Schristos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
104ed0d50c3Schristos   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
105ed0d50c3Schristos   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
106ed0d50c3Schristos   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
107ed0d50c3Schristos   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
108ed0d50c3Schristos   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
109ed0d50c3Schristos   { "RELAXED", &bool_attr[0], &bool_attr[0] },
110ed0d50c3Schristos   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
111ed0d50c3Schristos   { "PBB", &bool_attr[0], &bool_attr[0] },
112ed0d50c3Schristos   { "NOT-IN-DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
113ed0d50c3Schristos   { 0, 0, 0 }
114ed0d50c3Schristos };
115ed0d50c3Schristos 
116ed0d50c3Schristos /* Instruction set variants.  */
117ed0d50c3Schristos 
118ed0d50c3Schristos static const CGEN_ISA fr30_cgen_isa_table[] = {
119ed0d50c3Schristos   { "fr30", 16, 16, 16, 48 },
120ed0d50c3Schristos   { 0, 0, 0, 0, 0 }
121ed0d50c3Schristos };
122ed0d50c3Schristos 
123ed0d50c3Schristos /* Machine variants.  */
124ed0d50c3Schristos 
125ed0d50c3Schristos static const CGEN_MACH fr30_cgen_mach_table[] = {
126ed0d50c3Schristos   { "fr30", "fr30", MACH_FR30, 0 },
127ed0d50c3Schristos   { 0, 0, 0, 0 }
128ed0d50c3Schristos };
129ed0d50c3Schristos 
130ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_gr_names_entries[] =
131ed0d50c3Schristos {
132ed0d50c3Schristos   { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
133ed0d50c3Schristos   { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
134ed0d50c3Schristos   { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
135ed0d50c3Schristos   { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
136ed0d50c3Schristos   { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
137ed0d50c3Schristos   { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
138ed0d50c3Schristos   { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
139ed0d50c3Schristos   { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
140ed0d50c3Schristos   { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
141ed0d50c3Schristos   { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
142ed0d50c3Schristos   { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
143ed0d50c3Schristos   { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
144ed0d50c3Schristos   { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
145ed0d50c3Schristos   { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
146ed0d50c3Schristos   { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
147ed0d50c3Schristos   { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
148ed0d50c3Schristos   { "ac", 13, {0, {{{0, 0}}}}, 0, 0 },
149ed0d50c3Schristos   { "fp", 14, {0, {{{0, 0}}}}, 0, 0 },
150ed0d50c3Schristos   { "sp", 15, {0, {{{0, 0}}}}, 0, 0 }
151ed0d50c3Schristos };
152ed0d50c3Schristos 
153ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_gr_names =
154ed0d50c3Schristos {
155ed0d50c3Schristos   & fr30_cgen_opval_gr_names_entries[0],
156ed0d50c3Schristos   19,
157ed0d50c3Schristos   0, 0, 0, 0, ""
158ed0d50c3Schristos };
159ed0d50c3Schristos 
160ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_cr_names_entries[] =
161ed0d50c3Schristos {
162ed0d50c3Schristos   { "cr0", 0, {0, {{{0, 0}}}}, 0, 0 },
163ed0d50c3Schristos   { "cr1", 1, {0, {{{0, 0}}}}, 0, 0 },
164ed0d50c3Schristos   { "cr2", 2, {0, {{{0, 0}}}}, 0, 0 },
165ed0d50c3Schristos   { "cr3", 3, {0, {{{0, 0}}}}, 0, 0 },
166ed0d50c3Schristos   { "cr4", 4, {0, {{{0, 0}}}}, 0, 0 },
167ed0d50c3Schristos   { "cr5", 5, {0, {{{0, 0}}}}, 0, 0 },
168ed0d50c3Schristos   { "cr6", 6, {0, {{{0, 0}}}}, 0, 0 },
169ed0d50c3Schristos   { "cr7", 7, {0, {{{0, 0}}}}, 0, 0 },
170ed0d50c3Schristos   { "cr8", 8, {0, {{{0, 0}}}}, 0, 0 },
171ed0d50c3Schristos   { "cr9", 9, {0, {{{0, 0}}}}, 0, 0 },
172ed0d50c3Schristos   { "cr10", 10, {0, {{{0, 0}}}}, 0, 0 },
173ed0d50c3Schristos   { "cr11", 11, {0, {{{0, 0}}}}, 0, 0 },
174ed0d50c3Schristos   { "cr12", 12, {0, {{{0, 0}}}}, 0, 0 },
175ed0d50c3Schristos   { "cr13", 13, {0, {{{0, 0}}}}, 0, 0 },
176ed0d50c3Schristos   { "cr14", 14, {0, {{{0, 0}}}}, 0, 0 },
177ed0d50c3Schristos   { "cr15", 15, {0, {{{0, 0}}}}, 0, 0 }
178ed0d50c3Schristos };
179ed0d50c3Schristos 
180ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_cr_names =
181ed0d50c3Schristos {
182ed0d50c3Schristos   & fr30_cgen_opval_cr_names_entries[0],
183ed0d50c3Schristos   16,
184ed0d50c3Schristos   0, 0, 0, 0, ""
185ed0d50c3Schristos };
186ed0d50c3Schristos 
187ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_dr_names_entries[] =
188ed0d50c3Schristos {
189ed0d50c3Schristos   { "tbr", 0, {0, {{{0, 0}}}}, 0, 0 },
190ed0d50c3Schristos   { "rp", 1, {0, {{{0, 0}}}}, 0, 0 },
191ed0d50c3Schristos   { "ssp", 2, {0, {{{0, 0}}}}, 0, 0 },
192ed0d50c3Schristos   { "usp", 3, {0, {{{0, 0}}}}, 0, 0 },
193ed0d50c3Schristos   { "mdh", 4, {0, {{{0, 0}}}}, 0, 0 },
194ed0d50c3Schristos   { "mdl", 5, {0, {{{0, 0}}}}, 0, 0 }
195ed0d50c3Schristos };
196ed0d50c3Schristos 
197ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_dr_names =
198ed0d50c3Schristos {
199ed0d50c3Schristos   & fr30_cgen_opval_dr_names_entries[0],
200ed0d50c3Schristos   6,
201ed0d50c3Schristos   0, 0, 0, 0, ""
202ed0d50c3Schristos };
203ed0d50c3Schristos 
204ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] =
205ed0d50c3Schristos {
206ed0d50c3Schristos   { "ps", 0, {0, {{{0, 0}}}}, 0, 0 }
207ed0d50c3Schristos };
208ed0d50c3Schristos 
209ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_h_ps =
210ed0d50c3Schristos {
211ed0d50c3Schristos   & fr30_cgen_opval_h_ps_entries[0],
212ed0d50c3Schristos   1,
213ed0d50c3Schristos   0, 0, 0, 0, ""
214ed0d50c3Schristos };
215ed0d50c3Schristos 
216ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] =
217ed0d50c3Schristos {
218ed0d50c3Schristos   { "r13", 0, {0, {{{0, 0}}}}, 0, 0 }
219ed0d50c3Schristos };
220ed0d50c3Schristos 
221ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_h_r13 =
222ed0d50c3Schristos {
223ed0d50c3Schristos   & fr30_cgen_opval_h_r13_entries[0],
224ed0d50c3Schristos   1,
225ed0d50c3Schristos   0, 0, 0, 0, ""
226ed0d50c3Schristos };
227ed0d50c3Schristos 
228ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] =
229ed0d50c3Schristos {
230ed0d50c3Schristos   { "r14", 0, {0, {{{0, 0}}}}, 0, 0 }
231ed0d50c3Schristos };
232ed0d50c3Schristos 
233ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_h_r14 =
234ed0d50c3Schristos {
235ed0d50c3Schristos   & fr30_cgen_opval_h_r14_entries[0],
236ed0d50c3Schristos   1,
237ed0d50c3Schristos   0, 0, 0, 0, ""
238ed0d50c3Schristos };
239ed0d50c3Schristos 
240ed0d50c3Schristos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] =
241ed0d50c3Schristos {
242ed0d50c3Schristos   { "r15", 0, {0, {{{0, 0}}}}, 0, 0 }
243ed0d50c3Schristos };
244ed0d50c3Schristos 
245ed0d50c3Schristos CGEN_KEYWORD fr30_cgen_opval_h_r15 =
246ed0d50c3Schristos {
247ed0d50c3Schristos   & fr30_cgen_opval_h_r15_entries[0],
248ed0d50c3Schristos   1,
249ed0d50c3Schristos   0, 0, 0, 0, ""
250ed0d50c3Schristos };
251ed0d50c3Schristos 
252ed0d50c3Schristos 
253ed0d50c3Schristos /* The hardware table.  */
254ed0d50c3Schristos 
255ed0d50c3Schristos #define A(a) (1 << CGEN_HW_##a)
256ed0d50c3Schristos 
257ed0d50c3Schristos const CGEN_HW_ENTRY fr30_cgen_hw_table[] =
258ed0d50c3Schristos {
259ed0d50c3Schristos   { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
260ed0d50c3Schristos   { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
261ed0d50c3Schristos   { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
262ed0d50c3Schristos   { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
263ed0d50c3Schristos   { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
264ed0d50c3Schristos   { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
265ed0d50c3Schristos   { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
266ed0d50c3Schristos   { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
267ed0d50c3Schristos   { "h-dr", HW_H_DR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_dr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
268ed0d50c3Schristos   { "h-ps", HW_H_PS, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_ps, { 0, { { { (1<<MACH_BASE), 0 } } } } },
269ed0d50c3Schristos   { "h-r13", HW_H_R13, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r13, { 0, { { { (1<<MACH_BASE), 0 } } } } },
270ed0d50c3Schristos   { "h-r14", HW_H_R14, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r14, { 0, { { { (1<<MACH_BASE), 0 } } } } },
271ed0d50c3Schristos   { "h-r15", HW_H_R15, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r15, { 0, { { { (1<<MACH_BASE), 0 } } } } },
272ed0d50c3Schristos   { "h-nbit", HW_H_NBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
273ed0d50c3Schristos   { "h-zbit", HW_H_ZBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
274ed0d50c3Schristos   { "h-vbit", HW_H_VBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
275ed0d50c3Schristos   { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
276ed0d50c3Schristos   { "h-ibit", HW_H_IBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
277ed0d50c3Schristos   { "h-sbit", HW_H_SBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
278ed0d50c3Schristos   { "h-tbit", HW_H_TBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
279ed0d50c3Schristos   { "h-d0bit", HW_H_D0BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
280ed0d50c3Schristos   { "h-d1bit", HW_H_D1BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
281ed0d50c3Schristos   { "h-ccr", HW_H_CCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
282ed0d50c3Schristos   { "h-scr", HW_H_SCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
283ed0d50c3Schristos   { "h-ilm", HW_H_ILM, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
284ed0d50c3Schristos   { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
285ed0d50c3Schristos };
286ed0d50c3Schristos 
287ed0d50c3Schristos #undef A
288ed0d50c3Schristos 
289ed0d50c3Schristos 
290ed0d50c3Schristos /* The instruction field table.  */
291ed0d50c3Schristos 
292ed0d50c3Schristos #define A(a) (1 << CGEN_IFLD_##a)
293ed0d50c3Schristos 
294ed0d50c3Schristos const CGEN_IFLD fr30_cgen_ifld_table[] =
295ed0d50c3Schristos {
296ed0d50c3Schristos   { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
297ed0d50c3Schristos   { FR30_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
298ed0d50c3Schristos   { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
299ed0d50c3Schristos   { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
300ed0d50c3Schristos   { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
301ed0d50c3Schristos   { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
302ed0d50c3Schristos   { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
303ed0d50c3Schristos   { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
304ed0d50c3Schristos   { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
305ed0d50c3Schristos   { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
306ed0d50c3Schristos   { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
307ed0d50c3Schristos   { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
308ed0d50c3Schristos   { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
309ed0d50c3Schristos   { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
310ed0d50c3Schristos   { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
311ed0d50c3Schristos   { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
312ed0d50c3Schristos   { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
313ed0d50c3Schristos   { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
314ed0d50c3Schristos   { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
315ed0d50c3Schristos   { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
316ed0d50c3Schristos   { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
317ed0d50c3Schristos   { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
318ed0d50c3Schristos   { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
319ed0d50c3Schristos   { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
320ed0d50c3Schristos   { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
321ed0d50c3Schristos   { FR30_F_I20, "f-i20", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
322ed0d50c3Schristos   { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
323ed0d50c3Schristos   { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
324ed0d50c3Schristos   { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
325ed0d50c3Schristos   { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
326ed0d50c3Schristos   { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
327ed0d50c3Schristos   { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
328ed0d50c3Schristos   { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
329ed0d50c3Schristos   { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
330ed0d50c3Schristos   { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
331ed0d50c3Schristos   { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
332ed0d50c3Schristos   { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
333ed0d50c3Schristos   { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
334ed0d50c3Schristos   { FR30_F_REGLIST_HI_ST, "f-reglist_hi_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
335ed0d50c3Schristos   { FR30_F_REGLIST_LOW_ST, "f-reglist_low_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
336ed0d50c3Schristos   { FR30_F_REGLIST_HI_LD, "f-reglist_hi_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
337ed0d50c3Schristos   { FR30_F_REGLIST_LOW_LD, "f-reglist_low_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
338ed0d50c3Schristos   { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
339ed0d50c3Schristos };
340ed0d50c3Schristos 
341ed0d50c3Schristos #undef A
342ed0d50c3Schristos 
343ed0d50c3Schristos 
344ed0d50c3Schristos 
345ed0d50c3Schristos /* multi ifield declarations */
346ed0d50c3Schristos 
347ed0d50c3Schristos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD [];
348ed0d50c3Schristos 
349ed0d50c3Schristos 
350ed0d50c3Schristos /* multi ifield definitions */
351ed0d50c3Schristos 
352ed0d50c3Schristos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD [] =
353ed0d50c3Schristos {
354ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_I20_4] } },
355ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_I20_16] } },
356ed0d50c3Schristos     { 0, { (const PTR) 0 } }
357ed0d50c3Schristos };
358ed0d50c3Schristos 
359ed0d50c3Schristos /* The operand table.  */
360ed0d50c3Schristos 
361ed0d50c3Schristos #define A(a) (1 << CGEN_OPERAND_##a)
362ed0d50c3Schristos #define OPERAND(op) FR30_OPERAND_##op
363ed0d50c3Schristos 
364ed0d50c3Schristos const CGEN_OPERAND fr30_cgen_operand_table[] =
365ed0d50c3Schristos {
366ed0d50c3Schristos /* pc: program counter */
367ed0d50c3Schristos   { "pc", FR30_OPERAND_PC, HW_H_PC, 0, 0,
368ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_NIL] } },
369ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
370ed0d50c3Schristos /* Ri: destination register */
371ed0d50c3Schristos   { "Ri", FR30_OPERAND_RI, HW_H_GR, 12, 4,
372ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RI] } },
373ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
374ed0d50c3Schristos /* Rj: source register */
375ed0d50c3Schristos   { "Rj", FR30_OPERAND_RJ, HW_H_GR, 8, 4,
376ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RJ] } },
377ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
378ed0d50c3Schristos /* Ric: target register coproc insn */
379ed0d50c3Schristos   { "Ric", FR30_OPERAND_RIC, HW_H_GR, 12, 4,
380ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RIC] } },
381ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
382ed0d50c3Schristos /* Rjc: source register coproc insn */
383ed0d50c3Schristos   { "Rjc", FR30_OPERAND_RJC, HW_H_GR, 8, 4,
384ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RJC] } },
385ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
386ed0d50c3Schristos /* CRi: coprocessor register */
387ed0d50c3Schristos   { "CRi", FR30_OPERAND_CRI, HW_H_CR, 12, 4,
388ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_CRI] } },
389ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
390ed0d50c3Schristos /* CRj: coprocessor register */
391ed0d50c3Schristos   { "CRj", FR30_OPERAND_CRJ, HW_H_CR, 8, 4,
392ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_CRJ] } },
393ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
394ed0d50c3Schristos /* Rs1: dedicated register */
395ed0d50c3Schristos   { "Rs1", FR30_OPERAND_RS1, HW_H_DR, 8, 4,
396ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RS1] } },
397ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
398ed0d50c3Schristos /* Rs2: dedicated register */
399ed0d50c3Schristos   { "Rs2", FR30_OPERAND_RS2, HW_H_DR, 12, 4,
400ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_RS2] } },
401ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
402ed0d50c3Schristos /* R13: General Register 13 */
403ed0d50c3Schristos   { "R13", FR30_OPERAND_R13, HW_H_R13, 0, 0,
404ed0d50c3Schristos     { 0, { (const PTR) 0 } },
405ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
406ed0d50c3Schristos /* R14: General Register 14 */
407ed0d50c3Schristos   { "R14", FR30_OPERAND_R14, HW_H_R14, 0, 0,
408ed0d50c3Schristos     { 0, { (const PTR) 0 } },
409ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
410ed0d50c3Schristos /* R15: General Register 15 */
411ed0d50c3Schristos   { "R15", FR30_OPERAND_R15, HW_H_R15, 0, 0,
412ed0d50c3Schristos     { 0, { (const PTR) 0 } },
413ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
414ed0d50c3Schristos /* ps: Program Status register */
415ed0d50c3Schristos   { "ps", FR30_OPERAND_PS, HW_H_PS, 0, 0,
416ed0d50c3Schristos     { 0, { (const PTR) 0 } },
417ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
418ed0d50c3Schristos /* u4: 4  bit unsigned immediate */
419ed0d50c3Schristos   { "u4", FR30_OPERAND_U4, HW_H_UINT, 8, 4,
420ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_U4] } },
421ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
422ed0d50c3Schristos /* u4c: 4  bit unsigned immediate */
423ed0d50c3Schristos   { "u4c", FR30_OPERAND_U4C, HW_H_UINT, 12, 4,
424ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_U4C] } },
425ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
426ed0d50c3Schristos /* u8: 8  bit unsigned immediate */
427ed0d50c3Schristos   { "u8", FR30_OPERAND_U8, HW_H_UINT, 8, 8,
428ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_U8] } },
429ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
430ed0d50c3Schristos /* i8: 8  bit unsigned immediate */
431ed0d50c3Schristos   { "i8", FR30_OPERAND_I8, HW_H_UINT, 4, 8,
432ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_I8] } },
433ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
434ed0d50c3Schristos /* udisp6: 6  bit unsigned immediate */
435ed0d50c3Schristos   { "udisp6", FR30_OPERAND_UDISP6, HW_H_UINT, 8, 4,
436ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_UDISP6] } },
437ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
438ed0d50c3Schristos /* disp8: 8  bit signed   immediate */
439ed0d50c3Schristos   { "disp8", FR30_OPERAND_DISP8, HW_H_SINT, 4, 8,
440ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DISP8] } },
441ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
442ed0d50c3Schristos /* disp9: 9  bit signed   immediate */
443ed0d50c3Schristos   { "disp9", FR30_OPERAND_DISP9, HW_H_SINT, 4, 8,
444ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DISP9] } },
445ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
446ed0d50c3Schristos /* disp10: 10 bit signed   immediate */
447ed0d50c3Schristos   { "disp10", FR30_OPERAND_DISP10, HW_H_SINT, 4, 8,
448ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DISP10] } },
449ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
450ed0d50c3Schristos /* s10: 10 bit signed   immediate */
451ed0d50c3Schristos   { "s10", FR30_OPERAND_S10, HW_H_SINT, 8, 8,
452ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_S10] } },
453ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
454ed0d50c3Schristos /* u10: 10 bit unsigned immediate */
455ed0d50c3Schristos   { "u10", FR30_OPERAND_U10, HW_H_UINT, 8, 8,
456ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_U10] } },
457ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
458ed0d50c3Schristos /* i32: 32 bit immediate */
459ed0d50c3Schristos   { "i32", FR30_OPERAND_I32, HW_H_UINT, 0, 32,
460ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_I32] } },
461ed0d50c3Schristos     { 0|A(HASH_PREFIX)|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
462ed0d50c3Schristos /* m4: 4  bit negative immediate */
463ed0d50c3Schristos   { "m4", FR30_OPERAND_M4, HW_H_SINT, 8, 4,
464ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_M4] } },
465ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
466ed0d50c3Schristos /* i20: 20 bit immediate */
467ed0d50c3Schristos   { "i20", FR30_OPERAND_I20, HW_H_UINT, 0, 20,
468ed0d50c3Schristos     { 2, { (const PTR) &FR30_F_I20_MULTI_IFIELD[0] } },
469ed0d50c3Schristos     { 0|A(HASH_PREFIX)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
470ed0d50c3Schristos /* dir8: 8  bit direct address */
471ed0d50c3Schristos   { "dir8", FR30_OPERAND_DIR8, HW_H_UINT, 8, 8,
472ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DIR8] } },
473ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
474ed0d50c3Schristos /* dir9: 9  bit direct address */
475ed0d50c3Schristos   { "dir9", FR30_OPERAND_DIR9, HW_H_UINT, 8, 8,
476ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DIR9] } },
477ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
478ed0d50c3Schristos /* dir10: 10 bit direct address */
479ed0d50c3Schristos   { "dir10", FR30_OPERAND_DIR10, HW_H_UINT, 8, 8,
480ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_DIR10] } },
481ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
482ed0d50c3Schristos /* label9: 9  bit pc relative address */
483ed0d50c3Schristos   { "label9", FR30_OPERAND_LABEL9, HW_H_IADDR, 8, 8,
484ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REL9] } },
485ed0d50c3Schristos     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
486ed0d50c3Schristos /* label12: 12 bit pc relative address */
487ed0d50c3Schristos   { "label12", FR30_OPERAND_LABEL12, HW_H_IADDR, 5, 11,
488ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REL12] } },
489ed0d50c3Schristos     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
490ed0d50c3Schristos /* reglist_low_ld: 8 bit low register mask for ldm */
491ed0d50c3Schristos   { "reglist_low_ld", FR30_OPERAND_REGLIST_LOW_LD, HW_H_UINT, 8, 8,
492ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_LD] } },
493ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
494ed0d50c3Schristos /* reglist_hi_ld: 8 bit high register mask for ldm */
495ed0d50c3Schristos   { "reglist_hi_ld", FR30_OPERAND_REGLIST_HI_LD, HW_H_UINT, 8, 8,
496ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_LD] } },
497ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
498ed0d50c3Schristos /* reglist_low_st: 8 bit low register mask for stm */
499ed0d50c3Schristos   { "reglist_low_st", FR30_OPERAND_REGLIST_LOW_ST, HW_H_UINT, 8, 8,
500ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_ST] } },
501ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
502ed0d50c3Schristos /* reglist_hi_st: 8 bit high register mask for stm */
503ed0d50c3Schristos   { "reglist_hi_st", FR30_OPERAND_REGLIST_HI_ST, HW_H_UINT, 8, 8,
504ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_ST] } },
505ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
506ed0d50c3Schristos /* cc: condition codes */
507ed0d50c3Schristos   { "cc", FR30_OPERAND_CC, HW_H_UINT, 4, 4,
508ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_CC] } },
509ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
510ed0d50c3Schristos /* ccc: coprocessor calc */
511ed0d50c3Schristos   { "ccc", FR30_OPERAND_CCC, HW_H_UINT, 0, 8,
512ed0d50c3Schristos     { 0, { (const PTR) &fr30_cgen_ifld_table[FR30_F_CCC] } },
513ed0d50c3Schristos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
514ed0d50c3Schristos /* nbit: negative   bit */
515ed0d50c3Schristos   { "nbit", FR30_OPERAND_NBIT, HW_H_NBIT, 0, 0,
516ed0d50c3Schristos     { 0, { (const PTR) 0 } },
517ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
518ed0d50c3Schristos /* vbit: overflow   bit */
519ed0d50c3Schristos   { "vbit", FR30_OPERAND_VBIT, HW_H_VBIT, 0, 0,
520ed0d50c3Schristos     { 0, { (const PTR) 0 } },
521ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
522ed0d50c3Schristos /* zbit: zero       bit */
523ed0d50c3Schristos   { "zbit", FR30_OPERAND_ZBIT, HW_H_ZBIT, 0, 0,
524ed0d50c3Schristos     { 0, { (const PTR) 0 } },
525ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
526ed0d50c3Schristos /* cbit: carry      bit */
527ed0d50c3Schristos   { "cbit", FR30_OPERAND_CBIT, HW_H_CBIT, 0, 0,
528ed0d50c3Schristos     { 0, { (const PTR) 0 } },
529ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
530ed0d50c3Schristos /* ibit: interrupt  bit */
531ed0d50c3Schristos   { "ibit", FR30_OPERAND_IBIT, HW_H_IBIT, 0, 0,
532ed0d50c3Schristos     { 0, { (const PTR) 0 } },
533ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
534ed0d50c3Schristos /* sbit: stack      bit */
535ed0d50c3Schristos   { "sbit", FR30_OPERAND_SBIT, HW_H_SBIT, 0, 0,
536ed0d50c3Schristos     { 0, { (const PTR) 0 } },
537ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
538ed0d50c3Schristos /* tbit: trace trap bit */
539ed0d50c3Schristos   { "tbit", FR30_OPERAND_TBIT, HW_H_TBIT, 0, 0,
540ed0d50c3Schristos     { 0, { (const PTR) 0 } },
541ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
542ed0d50c3Schristos /* d0bit: division 0 bit */
543ed0d50c3Schristos   { "d0bit", FR30_OPERAND_D0BIT, HW_H_D0BIT, 0, 0,
544ed0d50c3Schristos     { 0, { (const PTR) 0 } },
545ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
546ed0d50c3Schristos /* d1bit: division 1 bit */
547ed0d50c3Schristos   { "d1bit", FR30_OPERAND_D1BIT, HW_H_D1BIT, 0, 0,
548ed0d50c3Schristos     { 0, { (const PTR) 0 } },
549ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
550ed0d50c3Schristos /* ccr: condition code bits */
551ed0d50c3Schristos   { "ccr", FR30_OPERAND_CCR, HW_H_CCR, 0, 0,
552ed0d50c3Schristos     { 0, { (const PTR) 0 } },
553ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
554ed0d50c3Schristos /* scr: system condition bits */
555ed0d50c3Schristos   { "scr", FR30_OPERAND_SCR, HW_H_SCR, 0, 0,
556ed0d50c3Schristos     { 0, { (const PTR) 0 } },
557ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
558ed0d50c3Schristos /* ilm: interrupt level mask */
559ed0d50c3Schristos   { "ilm", FR30_OPERAND_ILM, HW_H_ILM, 0, 0,
560ed0d50c3Schristos     { 0, { (const PTR) 0 } },
561ed0d50c3Schristos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
562ed0d50c3Schristos /* sentinel */
563ed0d50c3Schristos   { 0, 0, 0, 0, 0,
564ed0d50c3Schristos     { 0, { (const PTR) 0 } },
565ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } } }
566ed0d50c3Schristos };
567ed0d50c3Schristos 
568ed0d50c3Schristos #undef A
569ed0d50c3Schristos 
570ed0d50c3Schristos 
571ed0d50c3Schristos /* The instruction table.  */
572ed0d50c3Schristos 
573ed0d50c3Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
574ed0d50c3Schristos #define A(a) (1 << CGEN_INSN_##a)
575ed0d50c3Schristos 
576ed0d50c3Schristos static const CGEN_IBASE fr30_cgen_insn_table[MAX_INSNS] =
577ed0d50c3Schristos {
578ed0d50c3Schristos   /* Special null first entry.
579ed0d50c3Schristos      A `num' value of zero is thus invalid.
580ed0d50c3Schristos      Also, the special `invalid' insn resides here.  */
581ed0d50c3Schristos   { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
582ed0d50c3Schristos /* add $Rj,$Ri */
583ed0d50c3Schristos   {
584ed0d50c3Schristos     FR30_INSN_ADD, "add", "add", 16,
585ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
586ed0d50c3Schristos   },
587ed0d50c3Schristos /* add $u4,$Ri */
588ed0d50c3Schristos   {
589ed0d50c3Schristos     FR30_INSN_ADDI, "addi", "add", 16,
590ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
591ed0d50c3Schristos   },
592ed0d50c3Schristos /* add2 $m4,$Ri */
593ed0d50c3Schristos   {
594ed0d50c3Schristos     FR30_INSN_ADD2, "add2", "add2", 16,
595ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
596ed0d50c3Schristos   },
597ed0d50c3Schristos /* addc $Rj,$Ri */
598ed0d50c3Schristos   {
599ed0d50c3Schristos     FR30_INSN_ADDC, "addc", "addc", 16,
600ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
601ed0d50c3Schristos   },
602ed0d50c3Schristos /* addn $Rj,$Ri */
603ed0d50c3Schristos   {
604ed0d50c3Schristos     FR30_INSN_ADDN, "addn", "addn", 16,
605ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
606ed0d50c3Schristos   },
607ed0d50c3Schristos /* addn $u4,$Ri */
608ed0d50c3Schristos   {
609ed0d50c3Schristos     FR30_INSN_ADDNI, "addni", "addn", 16,
610ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
611ed0d50c3Schristos   },
612ed0d50c3Schristos /* addn2 $m4,$Ri */
613ed0d50c3Schristos   {
614ed0d50c3Schristos     FR30_INSN_ADDN2, "addn2", "addn2", 16,
615ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
616ed0d50c3Schristos   },
617ed0d50c3Schristos /* sub $Rj,$Ri */
618ed0d50c3Schristos   {
619ed0d50c3Schristos     FR30_INSN_SUB, "sub", "sub", 16,
620ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
621ed0d50c3Schristos   },
622ed0d50c3Schristos /* subc $Rj,$Ri */
623ed0d50c3Schristos   {
624ed0d50c3Schristos     FR30_INSN_SUBC, "subc", "subc", 16,
625ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
626ed0d50c3Schristos   },
627ed0d50c3Schristos /* subn $Rj,$Ri */
628ed0d50c3Schristos   {
629ed0d50c3Schristos     FR30_INSN_SUBN, "subn", "subn", 16,
630ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
631ed0d50c3Schristos   },
632ed0d50c3Schristos /* cmp $Rj,$Ri */
633ed0d50c3Schristos   {
634ed0d50c3Schristos     FR30_INSN_CMP, "cmp", "cmp", 16,
635ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
636ed0d50c3Schristos   },
637ed0d50c3Schristos /* cmp $u4,$Ri */
638ed0d50c3Schristos   {
639ed0d50c3Schristos     FR30_INSN_CMPI, "cmpi", "cmp", 16,
640ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
641ed0d50c3Schristos   },
642ed0d50c3Schristos /* cmp2 $m4,$Ri */
643ed0d50c3Schristos   {
644ed0d50c3Schristos     FR30_INSN_CMP2, "cmp2", "cmp2", 16,
645ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
646ed0d50c3Schristos   },
647ed0d50c3Schristos /* and $Rj,$Ri */
648ed0d50c3Schristos   {
649ed0d50c3Schristos     FR30_INSN_AND, "and", "and", 16,
650ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
651ed0d50c3Schristos   },
652ed0d50c3Schristos /* or $Rj,$Ri */
653ed0d50c3Schristos   {
654ed0d50c3Schristos     FR30_INSN_OR, "or", "or", 16,
655ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
656ed0d50c3Schristos   },
657ed0d50c3Schristos /* eor $Rj,$Ri */
658ed0d50c3Schristos   {
659ed0d50c3Schristos     FR30_INSN_EOR, "eor", "eor", 16,
660ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
661ed0d50c3Schristos   },
662ed0d50c3Schristos /* and $Rj,@$Ri */
663ed0d50c3Schristos   {
664ed0d50c3Schristos     FR30_INSN_ANDM, "andm", "and", 16,
665ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
666ed0d50c3Schristos   },
667ed0d50c3Schristos /* andh $Rj,@$Ri */
668ed0d50c3Schristos   {
669ed0d50c3Schristos     FR30_INSN_ANDH, "andh", "andh", 16,
670ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
671ed0d50c3Schristos   },
672ed0d50c3Schristos /* andb $Rj,@$Ri */
673ed0d50c3Schristos   {
674ed0d50c3Schristos     FR30_INSN_ANDB, "andb", "andb", 16,
675ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
676ed0d50c3Schristos   },
677ed0d50c3Schristos /* or $Rj,@$Ri */
678ed0d50c3Schristos   {
679ed0d50c3Schristos     FR30_INSN_ORM, "orm", "or", 16,
680ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
681ed0d50c3Schristos   },
682ed0d50c3Schristos /* orh $Rj,@$Ri */
683ed0d50c3Schristos   {
684ed0d50c3Schristos     FR30_INSN_ORH, "orh", "orh", 16,
685ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
686ed0d50c3Schristos   },
687ed0d50c3Schristos /* orb $Rj,@$Ri */
688ed0d50c3Schristos   {
689ed0d50c3Schristos     FR30_INSN_ORB, "orb", "orb", 16,
690ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
691ed0d50c3Schristos   },
692ed0d50c3Schristos /* eor $Rj,@$Ri */
693ed0d50c3Schristos   {
694ed0d50c3Schristos     FR30_INSN_EORM, "eorm", "eor", 16,
695ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
696ed0d50c3Schristos   },
697ed0d50c3Schristos /* eorh $Rj,@$Ri */
698ed0d50c3Schristos   {
699ed0d50c3Schristos     FR30_INSN_EORH, "eorh", "eorh", 16,
700ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
701ed0d50c3Schristos   },
702ed0d50c3Schristos /* eorb $Rj,@$Ri */
703ed0d50c3Schristos   {
704ed0d50c3Schristos     FR30_INSN_EORB, "eorb", "eorb", 16,
705ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
706ed0d50c3Schristos   },
707ed0d50c3Schristos /* bandl $u4,@$Ri */
708ed0d50c3Schristos   {
709ed0d50c3Schristos     FR30_INSN_BANDL, "bandl", "bandl", 16,
710ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
711ed0d50c3Schristos   },
712ed0d50c3Schristos /* borl $u4,@$Ri */
713ed0d50c3Schristos   {
714ed0d50c3Schristos     FR30_INSN_BORL, "borl", "borl", 16,
715ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
716ed0d50c3Schristos   },
717ed0d50c3Schristos /* beorl $u4,@$Ri */
718ed0d50c3Schristos   {
719ed0d50c3Schristos     FR30_INSN_BEORL, "beorl", "beorl", 16,
720ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
721ed0d50c3Schristos   },
722ed0d50c3Schristos /* bandh $u4,@$Ri */
723ed0d50c3Schristos   {
724ed0d50c3Schristos     FR30_INSN_BANDH, "bandh", "bandh", 16,
725ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
726ed0d50c3Schristos   },
727ed0d50c3Schristos /* borh $u4,@$Ri */
728ed0d50c3Schristos   {
729ed0d50c3Schristos     FR30_INSN_BORH, "borh", "borh", 16,
730ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
731ed0d50c3Schristos   },
732ed0d50c3Schristos /* beorh $u4,@$Ri */
733ed0d50c3Schristos   {
734ed0d50c3Schristos     FR30_INSN_BEORH, "beorh", "beorh", 16,
735ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
736ed0d50c3Schristos   },
737ed0d50c3Schristos /* btstl $u4,@$Ri */
738ed0d50c3Schristos   {
739ed0d50c3Schristos     FR30_INSN_BTSTL, "btstl", "btstl", 16,
740ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
741ed0d50c3Schristos   },
742ed0d50c3Schristos /* btsth $u4,@$Ri */
743ed0d50c3Schristos   {
744ed0d50c3Schristos     FR30_INSN_BTSTH, "btsth", "btsth", 16,
745ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
746ed0d50c3Schristos   },
747ed0d50c3Schristos /* mul $Rj,$Ri */
748ed0d50c3Schristos   {
749ed0d50c3Schristos     FR30_INSN_MUL, "mul", "mul", 16,
750ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
751ed0d50c3Schristos   },
752ed0d50c3Schristos /* mulu $Rj,$Ri */
753ed0d50c3Schristos   {
754ed0d50c3Schristos     FR30_INSN_MULU, "mulu", "mulu", 16,
755ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
756ed0d50c3Schristos   },
757ed0d50c3Schristos /* mulh $Rj,$Ri */
758ed0d50c3Schristos   {
759ed0d50c3Schristos     FR30_INSN_MULH, "mulh", "mulh", 16,
760ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
761ed0d50c3Schristos   },
762ed0d50c3Schristos /* muluh $Rj,$Ri */
763ed0d50c3Schristos   {
764ed0d50c3Schristos     FR30_INSN_MULUH, "muluh", "muluh", 16,
765ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
766ed0d50c3Schristos   },
767ed0d50c3Schristos /* div0s $Ri */
768ed0d50c3Schristos   {
769ed0d50c3Schristos     FR30_INSN_DIV0S, "div0s", "div0s", 16,
770ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
771ed0d50c3Schristos   },
772ed0d50c3Schristos /* div0u $Ri */
773ed0d50c3Schristos   {
774ed0d50c3Schristos     FR30_INSN_DIV0U, "div0u", "div0u", 16,
775ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
776ed0d50c3Schristos   },
777ed0d50c3Schristos /* div1 $Ri */
778ed0d50c3Schristos   {
779ed0d50c3Schristos     FR30_INSN_DIV1, "div1", "div1", 16,
780ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
781ed0d50c3Schristos   },
782ed0d50c3Schristos /* div2 $Ri */
783ed0d50c3Schristos   {
784ed0d50c3Schristos     FR30_INSN_DIV2, "div2", "div2", 16,
785ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
786ed0d50c3Schristos   },
787ed0d50c3Schristos /* div3 */
788ed0d50c3Schristos   {
789ed0d50c3Schristos     FR30_INSN_DIV3, "div3", "div3", 16,
790ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
791ed0d50c3Schristos   },
792ed0d50c3Schristos /* div4s */
793ed0d50c3Schristos   {
794ed0d50c3Schristos     FR30_INSN_DIV4S, "div4s", "div4s", 16,
795ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
796ed0d50c3Schristos   },
797ed0d50c3Schristos /* lsl $Rj,$Ri */
798ed0d50c3Schristos   {
799ed0d50c3Schristos     FR30_INSN_LSL, "lsl", "lsl", 16,
800ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
801ed0d50c3Schristos   },
802ed0d50c3Schristos /* lsl $u4,$Ri */
803ed0d50c3Schristos   {
804ed0d50c3Schristos     FR30_INSN_LSLI, "lsli", "lsl", 16,
805ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
806ed0d50c3Schristos   },
807ed0d50c3Schristos /* lsl2 $u4,$Ri */
808ed0d50c3Schristos   {
809ed0d50c3Schristos     FR30_INSN_LSL2, "lsl2", "lsl2", 16,
810ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
811ed0d50c3Schristos   },
812ed0d50c3Schristos /* lsr $Rj,$Ri */
813ed0d50c3Schristos   {
814ed0d50c3Schristos     FR30_INSN_LSR, "lsr", "lsr", 16,
815ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
816ed0d50c3Schristos   },
817ed0d50c3Schristos /* lsr $u4,$Ri */
818ed0d50c3Schristos   {
819ed0d50c3Schristos     FR30_INSN_LSRI, "lsri", "lsr", 16,
820ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
821ed0d50c3Schristos   },
822ed0d50c3Schristos /* lsr2 $u4,$Ri */
823ed0d50c3Schristos   {
824ed0d50c3Schristos     FR30_INSN_LSR2, "lsr2", "lsr2", 16,
825ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
826ed0d50c3Schristos   },
827ed0d50c3Schristos /* asr $Rj,$Ri */
828ed0d50c3Schristos   {
829ed0d50c3Schristos     FR30_INSN_ASR, "asr", "asr", 16,
830ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
831ed0d50c3Schristos   },
832ed0d50c3Schristos /* asr $u4,$Ri */
833ed0d50c3Schristos   {
834ed0d50c3Schristos     FR30_INSN_ASRI, "asri", "asr", 16,
835ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
836ed0d50c3Schristos   },
837ed0d50c3Schristos /* asr2 $u4,$Ri */
838ed0d50c3Schristos   {
839ed0d50c3Schristos     FR30_INSN_ASR2, "asr2", "asr2", 16,
840ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
841ed0d50c3Schristos   },
842ed0d50c3Schristos /* ldi:8 $i8,$Ri */
843ed0d50c3Schristos   {
844ed0d50c3Schristos     FR30_INSN_LDI8, "ldi8", "ldi:8", 16,
845ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
846ed0d50c3Schristos   },
847ed0d50c3Schristos /* ldi:20 $i20,$Ri */
848ed0d50c3Schristos   {
849ed0d50c3Schristos     FR30_INSN_LDI20, "ldi20", "ldi:20", 32,
850ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
851ed0d50c3Schristos   },
852ed0d50c3Schristos /* ldi:32 $i32,$Ri */
853ed0d50c3Schristos   {
854ed0d50c3Schristos     FR30_INSN_LDI32, "ldi32", "ldi:32", 48,
855ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
856ed0d50c3Schristos   },
857ed0d50c3Schristos /* ld @$Rj,$Ri */
858ed0d50c3Schristos   {
859ed0d50c3Schristos     FR30_INSN_LD, "ld", "ld", 16,
860ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
861ed0d50c3Schristos   },
862ed0d50c3Schristos /* lduh @$Rj,$Ri */
863ed0d50c3Schristos   {
864ed0d50c3Schristos     FR30_INSN_LDUH, "lduh", "lduh", 16,
865ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
866ed0d50c3Schristos   },
867ed0d50c3Schristos /* ldub @$Rj,$Ri */
868ed0d50c3Schristos   {
869ed0d50c3Schristos     FR30_INSN_LDUB, "ldub", "ldub", 16,
870ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
871ed0d50c3Schristos   },
872ed0d50c3Schristos /* ld @($R13,$Rj),$Ri */
873ed0d50c3Schristos   {
874ed0d50c3Schristos     FR30_INSN_LDR13, "ldr13", "ld", 16,
875ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
876ed0d50c3Schristos   },
877ed0d50c3Schristos /* lduh @($R13,$Rj),$Ri */
878ed0d50c3Schristos   {
879ed0d50c3Schristos     FR30_INSN_LDR13UH, "ldr13uh", "lduh", 16,
880ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
881ed0d50c3Schristos   },
882ed0d50c3Schristos /* ldub @($R13,$Rj),$Ri */
883ed0d50c3Schristos   {
884ed0d50c3Schristos     FR30_INSN_LDR13UB, "ldr13ub", "ldub", 16,
885ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
886ed0d50c3Schristos   },
887ed0d50c3Schristos /* ld @($R14,$disp10),$Ri */
888ed0d50c3Schristos   {
889ed0d50c3Schristos     FR30_INSN_LDR14, "ldr14", "ld", 16,
890ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
891ed0d50c3Schristos   },
892ed0d50c3Schristos /* lduh @($R14,$disp9),$Ri */
893ed0d50c3Schristos   {
894ed0d50c3Schristos     FR30_INSN_LDR14UH, "ldr14uh", "lduh", 16,
895ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
896ed0d50c3Schristos   },
897ed0d50c3Schristos /* ldub @($R14,$disp8),$Ri */
898ed0d50c3Schristos   {
899ed0d50c3Schristos     FR30_INSN_LDR14UB, "ldr14ub", "ldub", 16,
900ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
901ed0d50c3Schristos   },
902ed0d50c3Schristos /* ld @($R15,$udisp6),$Ri */
903ed0d50c3Schristos   {
904ed0d50c3Schristos     FR30_INSN_LDR15, "ldr15", "ld", 16,
905ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
906ed0d50c3Schristos   },
907ed0d50c3Schristos /* ld @$R15+,$Ri */
908ed0d50c3Schristos   {
909ed0d50c3Schristos     FR30_INSN_LDR15GR, "ldr15gr", "ld", 16,
910ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
911ed0d50c3Schristos   },
912ed0d50c3Schristos /* ld @$R15+,$Rs2 */
913ed0d50c3Schristos   {
914ed0d50c3Schristos     FR30_INSN_LDR15DR, "ldr15dr", "ld", 16,
915ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
916ed0d50c3Schristos   },
917ed0d50c3Schristos /* ld @$R15+,$ps */
918ed0d50c3Schristos   {
919ed0d50c3Schristos     FR30_INSN_LDR15PS, "ldr15ps", "ld", 16,
920ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
921ed0d50c3Schristos   },
922ed0d50c3Schristos /* st $Ri,@$Rj */
923ed0d50c3Schristos   {
924ed0d50c3Schristos     FR30_INSN_ST, "st", "st", 16,
925ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
926ed0d50c3Schristos   },
927ed0d50c3Schristos /* sth $Ri,@$Rj */
928ed0d50c3Schristos   {
929ed0d50c3Schristos     FR30_INSN_STH, "sth", "sth", 16,
930ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
931ed0d50c3Schristos   },
932ed0d50c3Schristos /* stb $Ri,@$Rj */
933ed0d50c3Schristos   {
934ed0d50c3Schristos     FR30_INSN_STB, "stb", "stb", 16,
935ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
936ed0d50c3Schristos   },
937ed0d50c3Schristos /* st $Ri,@($R13,$Rj) */
938ed0d50c3Schristos   {
939ed0d50c3Schristos     FR30_INSN_STR13, "str13", "st", 16,
940ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
941ed0d50c3Schristos   },
942ed0d50c3Schristos /* sth $Ri,@($R13,$Rj) */
943ed0d50c3Schristos   {
944ed0d50c3Schristos     FR30_INSN_STR13H, "str13h", "sth", 16,
945ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
946ed0d50c3Schristos   },
947ed0d50c3Schristos /* stb $Ri,@($R13,$Rj) */
948ed0d50c3Schristos   {
949ed0d50c3Schristos     FR30_INSN_STR13B, "str13b", "stb", 16,
950ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
951ed0d50c3Schristos   },
952ed0d50c3Schristos /* st $Ri,@($R14,$disp10) */
953ed0d50c3Schristos   {
954ed0d50c3Schristos     FR30_INSN_STR14, "str14", "st", 16,
955ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
956ed0d50c3Schristos   },
957ed0d50c3Schristos /* sth $Ri,@($R14,$disp9) */
958ed0d50c3Schristos   {
959ed0d50c3Schristos     FR30_INSN_STR14H, "str14h", "sth", 16,
960ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
961ed0d50c3Schristos   },
962ed0d50c3Schristos /* stb $Ri,@($R14,$disp8) */
963ed0d50c3Schristos   {
964ed0d50c3Schristos     FR30_INSN_STR14B, "str14b", "stb", 16,
965ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
966ed0d50c3Schristos   },
967ed0d50c3Schristos /* st $Ri,@($R15,$udisp6) */
968ed0d50c3Schristos   {
969ed0d50c3Schristos     FR30_INSN_STR15, "str15", "st", 16,
970ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
971ed0d50c3Schristos   },
972ed0d50c3Schristos /* st $Ri,@-$R15 */
973ed0d50c3Schristos   {
974ed0d50c3Schristos     FR30_INSN_STR15GR, "str15gr", "st", 16,
975ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
976ed0d50c3Schristos   },
977ed0d50c3Schristos /* st $Rs2,@-$R15 */
978ed0d50c3Schristos   {
979ed0d50c3Schristos     FR30_INSN_STR15DR, "str15dr", "st", 16,
980ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
981ed0d50c3Schristos   },
982ed0d50c3Schristos /* st $ps,@-$R15 */
983ed0d50c3Schristos   {
984ed0d50c3Schristos     FR30_INSN_STR15PS, "str15ps", "st", 16,
985ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
986ed0d50c3Schristos   },
987ed0d50c3Schristos /* mov $Rj,$Ri */
988ed0d50c3Schristos   {
989ed0d50c3Schristos     FR30_INSN_MOV, "mov", "mov", 16,
990ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
991ed0d50c3Schristos   },
992ed0d50c3Schristos /* mov $Rs1,$Ri */
993ed0d50c3Schristos   {
994ed0d50c3Schristos     FR30_INSN_MOVDR, "movdr", "mov", 16,
995ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
996ed0d50c3Schristos   },
997ed0d50c3Schristos /* mov $ps,$Ri */
998ed0d50c3Schristos   {
999ed0d50c3Schristos     FR30_INSN_MOVPS, "movps", "mov", 16,
1000ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1001ed0d50c3Schristos   },
1002ed0d50c3Schristos /* mov $Ri,$Rs1 */
1003ed0d50c3Schristos   {
1004ed0d50c3Schristos     FR30_INSN_MOV2DR, "mov2dr", "mov", 16,
1005ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1006ed0d50c3Schristos   },
1007ed0d50c3Schristos /* mov $Ri,$ps */
1008ed0d50c3Schristos   {
1009ed0d50c3Schristos     FR30_INSN_MOV2PS, "mov2ps", "mov", 16,
1010ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1011ed0d50c3Schristos   },
1012ed0d50c3Schristos /* jmp @$Ri */
1013ed0d50c3Schristos   {
1014ed0d50c3Schristos     FR30_INSN_JMP, "jmp", "jmp", 16,
1015ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1016ed0d50c3Schristos   },
1017ed0d50c3Schristos /* jmp:d @$Ri */
1018ed0d50c3Schristos   {
1019ed0d50c3Schristos     FR30_INSN_JMPD, "jmpd", "jmp:d", 16,
1020ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1021ed0d50c3Schristos   },
1022ed0d50c3Schristos /* call @$Ri */
1023ed0d50c3Schristos   {
1024ed0d50c3Schristos     FR30_INSN_CALLR, "callr", "call", 16,
1025ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1026ed0d50c3Schristos   },
1027ed0d50c3Schristos /* call:d @$Ri */
1028ed0d50c3Schristos   {
1029ed0d50c3Schristos     FR30_INSN_CALLRD, "callrd", "call:d", 16,
1030ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1031ed0d50c3Schristos   },
1032ed0d50c3Schristos /* call $label12 */
1033ed0d50c3Schristos   {
1034ed0d50c3Schristos     FR30_INSN_CALL, "call", "call", 16,
1035ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1036ed0d50c3Schristos   },
1037ed0d50c3Schristos /* call:d $label12 */
1038ed0d50c3Schristos   {
1039ed0d50c3Schristos     FR30_INSN_CALLD, "calld", "call:d", 16,
1040ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1041ed0d50c3Schristos   },
1042ed0d50c3Schristos /* ret */
1043ed0d50c3Schristos   {
1044ed0d50c3Schristos     FR30_INSN_RET, "ret", "ret", 16,
1045ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1046ed0d50c3Schristos   },
1047ed0d50c3Schristos /* ret:d */
1048ed0d50c3Schristos   {
1049ed0d50c3Schristos     FR30_INSN_RET_D, "ret:d", "ret:d", 16,
1050ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1051ed0d50c3Schristos   },
1052ed0d50c3Schristos /* int $u8 */
1053ed0d50c3Schristos   {
1054ed0d50c3Schristos     FR30_INSN_INT, "int", "int", 16,
1055ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1056ed0d50c3Schristos   },
1057ed0d50c3Schristos /* inte */
1058ed0d50c3Schristos   {
1059ed0d50c3Schristos     FR30_INSN_INTE, "inte", "inte", 16,
1060ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1061ed0d50c3Schristos   },
1062ed0d50c3Schristos /* reti */
1063ed0d50c3Schristos   {
1064ed0d50c3Schristos     FR30_INSN_RETI, "reti", "reti", 16,
1065ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1066ed0d50c3Schristos   },
1067ed0d50c3Schristos /* bra:d $label9 */
1068ed0d50c3Schristos   {
1069ed0d50c3Schristos     FR30_INSN_BRAD, "brad", "bra:d", 16,
1070ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1071ed0d50c3Schristos   },
1072ed0d50c3Schristos /* bra $label9 */
1073ed0d50c3Schristos   {
1074ed0d50c3Schristos     FR30_INSN_BRA, "bra", "bra", 16,
1075ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1076ed0d50c3Schristos   },
1077ed0d50c3Schristos /* bno:d $label9 */
1078ed0d50c3Schristos   {
1079ed0d50c3Schristos     FR30_INSN_BNOD, "bnod", "bno:d", 16,
1080ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1081ed0d50c3Schristos   },
1082ed0d50c3Schristos /* bno $label9 */
1083ed0d50c3Schristos   {
1084ed0d50c3Schristos     FR30_INSN_BNO, "bno", "bno", 16,
1085ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1086ed0d50c3Schristos   },
1087ed0d50c3Schristos /* beq:d $label9 */
1088ed0d50c3Schristos   {
1089ed0d50c3Schristos     FR30_INSN_BEQD, "beqd", "beq:d", 16,
1090ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1091ed0d50c3Schristos   },
1092ed0d50c3Schristos /* beq $label9 */
1093ed0d50c3Schristos   {
1094ed0d50c3Schristos     FR30_INSN_BEQ, "beq", "beq", 16,
1095ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1096ed0d50c3Schristos   },
1097ed0d50c3Schristos /* bne:d $label9 */
1098ed0d50c3Schristos   {
1099ed0d50c3Schristos     FR30_INSN_BNED, "bned", "bne:d", 16,
1100ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1101ed0d50c3Schristos   },
1102ed0d50c3Schristos /* bne $label9 */
1103ed0d50c3Schristos   {
1104ed0d50c3Schristos     FR30_INSN_BNE, "bne", "bne", 16,
1105ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1106ed0d50c3Schristos   },
1107ed0d50c3Schristos /* bc:d $label9 */
1108ed0d50c3Schristos   {
1109ed0d50c3Schristos     FR30_INSN_BCD, "bcd", "bc:d", 16,
1110ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1111ed0d50c3Schristos   },
1112ed0d50c3Schristos /* bc $label9 */
1113ed0d50c3Schristos   {
1114ed0d50c3Schristos     FR30_INSN_BC, "bc", "bc", 16,
1115ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1116ed0d50c3Schristos   },
1117ed0d50c3Schristos /* bnc:d $label9 */
1118ed0d50c3Schristos   {
1119ed0d50c3Schristos     FR30_INSN_BNCD, "bncd", "bnc:d", 16,
1120ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1121ed0d50c3Schristos   },
1122ed0d50c3Schristos /* bnc $label9 */
1123ed0d50c3Schristos   {
1124ed0d50c3Schristos     FR30_INSN_BNC, "bnc", "bnc", 16,
1125ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1126ed0d50c3Schristos   },
1127ed0d50c3Schristos /* bn:d $label9 */
1128ed0d50c3Schristos   {
1129ed0d50c3Schristos     FR30_INSN_BND, "bnd", "bn:d", 16,
1130ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1131ed0d50c3Schristos   },
1132ed0d50c3Schristos /* bn $label9 */
1133ed0d50c3Schristos   {
1134ed0d50c3Schristos     FR30_INSN_BN, "bn", "bn", 16,
1135ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1136ed0d50c3Schristos   },
1137ed0d50c3Schristos /* bp:d $label9 */
1138ed0d50c3Schristos   {
1139ed0d50c3Schristos     FR30_INSN_BPD, "bpd", "bp:d", 16,
1140ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1141ed0d50c3Schristos   },
1142ed0d50c3Schristos /* bp $label9 */
1143ed0d50c3Schristos   {
1144ed0d50c3Schristos     FR30_INSN_BP, "bp", "bp", 16,
1145ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1146ed0d50c3Schristos   },
1147ed0d50c3Schristos /* bv:d $label9 */
1148ed0d50c3Schristos   {
1149ed0d50c3Schristos     FR30_INSN_BVD, "bvd", "bv:d", 16,
1150ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1151ed0d50c3Schristos   },
1152ed0d50c3Schristos /* bv $label9 */
1153ed0d50c3Schristos   {
1154ed0d50c3Schristos     FR30_INSN_BV, "bv", "bv", 16,
1155ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1156ed0d50c3Schristos   },
1157ed0d50c3Schristos /* bnv:d $label9 */
1158ed0d50c3Schristos   {
1159ed0d50c3Schristos     FR30_INSN_BNVD, "bnvd", "bnv:d", 16,
1160ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1161ed0d50c3Schristos   },
1162ed0d50c3Schristos /* bnv $label9 */
1163ed0d50c3Schristos   {
1164ed0d50c3Schristos     FR30_INSN_BNV, "bnv", "bnv", 16,
1165ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1166ed0d50c3Schristos   },
1167ed0d50c3Schristos /* blt:d $label9 */
1168ed0d50c3Schristos   {
1169ed0d50c3Schristos     FR30_INSN_BLTD, "bltd", "blt:d", 16,
1170ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1171ed0d50c3Schristos   },
1172ed0d50c3Schristos /* blt $label9 */
1173ed0d50c3Schristos   {
1174ed0d50c3Schristos     FR30_INSN_BLT, "blt", "blt", 16,
1175ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1176ed0d50c3Schristos   },
1177ed0d50c3Schristos /* bge:d $label9 */
1178ed0d50c3Schristos   {
1179ed0d50c3Schristos     FR30_INSN_BGED, "bged", "bge:d", 16,
1180ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1181ed0d50c3Schristos   },
1182ed0d50c3Schristos /* bge $label9 */
1183ed0d50c3Schristos   {
1184ed0d50c3Schristos     FR30_INSN_BGE, "bge", "bge", 16,
1185ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1186ed0d50c3Schristos   },
1187ed0d50c3Schristos /* ble:d $label9 */
1188ed0d50c3Schristos   {
1189ed0d50c3Schristos     FR30_INSN_BLED, "bled", "ble:d", 16,
1190ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1191ed0d50c3Schristos   },
1192ed0d50c3Schristos /* ble $label9 */
1193ed0d50c3Schristos   {
1194ed0d50c3Schristos     FR30_INSN_BLE, "ble", "ble", 16,
1195ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1196ed0d50c3Schristos   },
1197ed0d50c3Schristos /* bgt:d $label9 */
1198ed0d50c3Schristos   {
1199ed0d50c3Schristos     FR30_INSN_BGTD, "bgtd", "bgt:d", 16,
1200ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1201ed0d50c3Schristos   },
1202ed0d50c3Schristos /* bgt $label9 */
1203ed0d50c3Schristos   {
1204ed0d50c3Schristos     FR30_INSN_BGT, "bgt", "bgt", 16,
1205ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1206ed0d50c3Schristos   },
1207ed0d50c3Schristos /* bls:d $label9 */
1208ed0d50c3Schristos   {
1209ed0d50c3Schristos     FR30_INSN_BLSD, "blsd", "bls:d", 16,
1210ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1211ed0d50c3Schristos   },
1212ed0d50c3Schristos /* bls $label9 */
1213ed0d50c3Schristos   {
1214ed0d50c3Schristos     FR30_INSN_BLS, "bls", "bls", 16,
1215ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1216ed0d50c3Schristos   },
1217ed0d50c3Schristos /* bhi:d $label9 */
1218ed0d50c3Schristos   {
1219ed0d50c3Schristos     FR30_INSN_BHID, "bhid", "bhi:d", 16,
1220ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1221ed0d50c3Schristos   },
1222ed0d50c3Schristos /* bhi $label9 */
1223ed0d50c3Schristos   {
1224ed0d50c3Schristos     FR30_INSN_BHI, "bhi", "bhi", 16,
1225ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1226ed0d50c3Schristos   },
1227ed0d50c3Schristos /* dmov $R13,@$dir10 */
1228ed0d50c3Schristos   {
1229ed0d50c3Schristos     FR30_INSN_DMOVR13, "dmovr13", "dmov", 16,
1230ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1231ed0d50c3Schristos   },
1232ed0d50c3Schristos /* dmovh $R13,@$dir9 */
1233ed0d50c3Schristos   {
1234ed0d50c3Schristos     FR30_INSN_DMOVR13H, "dmovr13h", "dmovh", 16,
1235ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1236ed0d50c3Schristos   },
1237ed0d50c3Schristos /* dmovb $R13,@$dir8 */
1238ed0d50c3Schristos   {
1239ed0d50c3Schristos     FR30_INSN_DMOVR13B, "dmovr13b", "dmovb", 16,
1240ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1241ed0d50c3Schristos   },
1242ed0d50c3Schristos /* dmov @$R13+,@$dir10 */
1243ed0d50c3Schristos   {
1244ed0d50c3Schristos     FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov", 16,
1245ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1246ed0d50c3Schristos   },
1247ed0d50c3Schristos /* dmovh @$R13+,@$dir9 */
1248ed0d50c3Schristos   {
1249ed0d50c3Schristos     FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh", 16,
1250ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1251ed0d50c3Schristos   },
1252ed0d50c3Schristos /* dmovb @$R13+,@$dir8 */
1253ed0d50c3Schristos   {
1254ed0d50c3Schristos     FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb", 16,
1255ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1256ed0d50c3Schristos   },
1257ed0d50c3Schristos /* dmov @$R15+,@$dir10 */
1258ed0d50c3Schristos   {
1259ed0d50c3Schristos     FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov", 16,
1260ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1261ed0d50c3Schristos   },
1262ed0d50c3Schristos /* dmov @$dir10,$R13 */
1263ed0d50c3Schristos   {
1264ed0d50c3Schristos     FR30_INSN_DMOV2R13, "dmov2r13", "dmov", 16,
1265ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1266ed0d50c3Schristos   },
1267ed0d50c3Schristos /* dmovh @$dir9,$R13 */
1268ed0d50c3Schristos   {
1269ed0d50c3Schristos     FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh", 16,
1270ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1271ed0d50c3Schristos   },
1272ed0d50c3Schristos /* dmovb @$dir8,$R13 */
1273ed0d50c3Schristos   {
1274ed0d50c3Schristos     FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb", 16,
1275ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1276ed0d50c3Schristos   },
1277ed0d50c3Schristos /* dmov @$dir10,@$R13+ */
1278ed0d50c3Schristos   {
1279ed0d50c3Schristos     FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov", 16,
1280ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1281ed0d50c3Schristos   },
1282ed0d50c3Schristos /* dmovh @$dir9,@$R13+ */
1283ed0d50c3Schristos   {
1284ed0d50c3Schristos     FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh", 16,
1285ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1286ed0d50c3Schristos   },
1287ed0d50c3Schristos /* dmovb @$dir8,@$R13+ */
1288ed0d50c3Schristos   {
1289ed0d50c3Schristos     FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb", 16,
1290ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1291ed0d50c3Schristos   },
1292ed0d50c3Schristos /* dmov @$dir10,@-$R15 */
1293ed0d50c3Schristos   {
1294ed0d50c3Schristos     FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov", 16,
1295ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1296ed0d50c3Schristos   },
1297ed0d50c3Schristos /* ldres @$Ri+,$u4 */
1298ed0d50c3Schristos   {
1299ed0d50c3Schristos     FR30_INSN_LDRES, "ldres", "ldres", 16,
1300ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1301ed0d50c3Schristos   },
1302ed0d50c3Schristos /* stres $u4,@$Ri+ */
1303ed0d50c3Schristos   {
1304ed0d50c3Schristos     FR30_INSN_STRES, "stres", "stres", 16,
1305ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1306ed0d50c3Schristos   },
1307ed0d50c3Schristos /* copop $u4c,$ccc,$CRj,$CRi */
1308ed0d50c3Schristos   {
1309ed0d50c3Schristos     FR30_INSN_COPOP, "copop", "copop", 32,
1310ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1311ed0d50c3Schristos   },
1312ed0d50c3Schristos /* copld $u4c,$ccc,$Rjc,$CRi */
1313ed0d50c3Schristos   {
1314ed0d50c3Schristos     FR30_INSN_COPLD, "copld", "copld", 32,
1315ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1316ed0d50c3Schristos   },
1317ed0d50c3Schristos /* copst $u4c,$ccc,$CRj,$Ric */
1318ed0d50c3Schristos   {
1319ed0d50c3Schristos     FR30_INSN_COPST, "copst", "copst", 32,
1320ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1321ed0d50c3Schristos   },
1322ed0d50c3Schristos /* copsv $u4c,$ccc,$CRj,$Ric */
1323ed0d50c3Schristos   {
1324ed0d50c3Schristos     FR30_INSN_COPSV, "copsv", "copsv", 32,
1325ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1326ed0d50c3Schristos   },
1327ed0d50c3Schristos /* nop */
1328ed0d50c3Schristos   {
1329ed0d50c3Schristos     FR30_INSN_NOP, "nop", "nop", 16,
1330ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1331ed0d50c3Schristos   },
1332ed0d50c3Schristos /* andccr $u8 */
1333ed0d50c3Schristos   {
1334ed0d50c3Schristos     FR30_INSN_ANDCCR, "andccr", "andccr", 16,
1335ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1336ed0d50c3Schristos   },
1337ed0d50c3Schristos /* orccr $u8 */
1338ed0d50c3Schristos   {
1339ed0d50c3Schristos     FR30_INSN_ORCCR, "orccr", "orccr", 16,
1340ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1341ed0d50c3Schristos   },
1342ed0d50c3Schristos /* stilm $u8 */
1343ed0d50c3Schristos   {
1344ed0d50c3Schristos     FR30_INSN_STILM, "stilm", "stilm", 16,
1345ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1346ed0d50c3Schristos   },
1347ed0d50c3Schristos /* addsp $s10 */
1348ed0d50c3Schristos   {
1349ed0d50c3Schristos     FR30_INSN_ADDSP, "addsp", "addsp", 16,
1350ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1351ed0d50c3Schristos   },
1352ed0d50c3Schristos /* extsb $Ri */
1353ed0d50c3Schristos   {
1354ed0d50c3Schristos     FR30_INSN_EXTSB, "extsb", "extsb", 16,
1355ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1356ed0d50c3Schristos   },
1357ed0d50c3Schristos /* extub $Ri */
1358ed0d50c3Schristos   {
1359ed0d50c3Schristos     FR30_INSN_EXTUB, "extub", "extub", 16,
1360ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1361ed0d50c3Schristos   },
1362ed0d50c3Schristos /* extsh $Ri */
1363ed0d50c3Schristos   {
1364ed0d50c3Schristos     FR30_INSN_EXTSH, "extsh", "extsh", 16,
1365ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1366ed0d50c3Schristos   },
1367ed0d50c3Schristos /* extuh $Ri */
1368ed0d50c3Schristos   {
1369ed0d50c3Schristos     FR30_INSN_EXTUH, "extuh", "extuh", 16,
1370ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1371ed0d50c3Schristos   },
1372ed0d50c3Schristos /* ldm0 ($reglist_low_ld) */
1373ed0d50c3Schristos   {
1374ed0d50c3Schristos     FR30_INSN_LDM0, "ldm0", "ldm0", 16,
1375ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1376ed0d50c3Schristos   },
1377ed0d50c3Schristos /* ldm1 ($reglist_hi_ld) */
1378ed0d50c3Schristos   {
1379ed0d50c3Schristos     FR30_INSN_LDM1, "ldm1", "ldm1", 16,
1380ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1381ed0d50c3Schristos   },
1382ed0d50c3Schristos /* stm0 ($reglist_low_st) */
1383ed0d50c3Schristos   {
1384ed0d50c3Schristos     FR30_INSN_STM0, "stm0", "stm0", 16,
1385ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1386ed0d50c3Schristos   },
1387ed0d50c3Schristos /* stm1 ($reglist_hi_st) */
1388ed0d50c3Schristos   {
1389ed0d50c3Schristos     FR30_INSN_STM1, "stm1", "stm1", 16,
1390ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1391ed0d50c3Schristos   },
1392ed0d50c3Schristos /* enter $u10 */
1393ed0d50c3Schristos   {
1394ed0d50c3Schristos     FR30_INSN_ENTER, "enter", "enter", 16,
1395ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1396ed0d50c3Schristos   },
1397ed0d50c3Schristos /* leave */
1398ed0d50c3Schristos   {
1399ed0d50c3Schristos     FR30_INSN_LEAVE, "leave", "leave", 16,
1400ed0d50c3Schristos     { 0, { { { (1<<MACH_BASE), 0 } } } }
1401ed0d50c3Schristos   },
1402ed0d50c3Schristos /* xchb @$Rj,$Ri */
1403ed0d50c3Schristos   {
1404ed0d50c3Schristos     FR30_INSN_XCHB, "xchb", "xchb", 16,
1405ed0d50c3Schristos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
1406ed0d50c3Schristos   },
1407ed0d50c3Schristos };
1408ed0d50c3Schristos 
1409ed0d50c3Schristos #undef OP
1410ed0d50c3Schristos #undef A
1411ed0d50c3Schristos 
1412ed0d50c3Schristos /* Initialize anything needed to be done once, before any cpu_open call.  */
1413ed0d50c3Schristos 
1414ed0d50c3Schristos static void
init_tables(void)1415ed0d50c3Schristos init_tables (void)
1416ed0d50c3Schristos {
1417ed0d50c3Schristos }
1418ed0d50c3Schristos 
141906324dcfSchristos #ifndef opcodes_error_handler
142006324dcfSchristos #define opcodes_error_handler(...) \
142106324dcfSchristos   fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
142206324dcfSchristos #endif
142306324dcfSchristos 
1424ed0d50c3Schristos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
1425ed0d50c3Schristos static void build_hw_table      (CGEN_CPU_TABLE *);
1426ed0d50c3Schristos static void build_ifield_table  (CGEN_CPU_TABLE *);
1427ed0d50c3Schristos static void build_operand_table (CGEN_CPU_TABLE *);
1428ed0d50c3Schristos static void build_insn_table    (CGEN_CPU_TABLE *);
1429ed0d50c3Schristos static void fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *);
1430ed0d50c3Schristos 
1431ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to look up a mach via its bfd name.  */
1432ed0d50c3Schristos 
1433ed0d50c3Schristos static const CGEN_MACH *
lookup_mach_via_bfd_name(const CGEN_MACH * table,const char * name)1434ed0d50c3Schristos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1435ed0d50c3Schristos {
1436ed0d50c3Schristos   while (table->name)
1437ed0d50c3Schristos     {
1438ed0d50c3Schristos       if (strcmp (name, table->bfd_name) == 0)
1439ed0d50c3Schristos 	return table;
1440ed0d50c3Schristos       ++table;
1441ed0d50c3Schristos     }
144206324dcfSchristos   return NULL;
1443ed0d50c3Schristos }
1444ed0d50c3Schristos 
1445ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
1446ed0d50c3Schristos 
1447ed0d50c3Schristos static void
build_hw_table(CGEN_CPU_TABLE * cd)1448ed0d50c3Schristos build_hw_table (CGEN_CPU_TABLE *cd)
1449ed0d50c3Schristos {
1450ed0d50c3Schristos   int i;
1451ed0d50c3Schristos   int machs = cd->machs;
1452ed0d50c3Schristos   const CGEN_HW_ENTRY *init = & fr30_cgen_hw_table[0];
1453ed0d50c3Schristos   /* MAX_HW is only an upper bound on the number of selected entries.
1454ed0d50c3Schristos      However each entry is indexed by it's enum so there can be holes in
1455ed0d50c3Schristos      the table.  */
1456ed0d50c3Schristos   const CGEN_HW_ENTRY **selected =
1457ed0d50c3Schristos     (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1458ed0d50c3Schristos 
1459ed0d50c3Schristos   cd->hw_table.init_entries = init;
1460ed0d50c3Schristos   cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1461ed0d50c3Schristos   memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1462ed0d50c3Schristos   /* ??? For now we just use machs to determine which ones we want.  */
1463ed0d50c3Schristos   for (i = 0; init[i].name != NULL; ++i)
1464ed0d50c3Schristos     if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1465ed0d50c3Schristos 	& machs)
1466ed0d50c3Schristos       selected[init[i].type] = &init[i];
1467ed0d50c3Schristos   cd->hw_table.entries = selected;
1468ed0d50c3Schristos   cd->hw_table.num_entries = MAX_HW;
1469ed0d50c3Schristos }
1470ed0d50c3Schristos 
1471ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
1472ed0d50c3Schristos 
1473ed0d50c3Schristos static void
build_ifield_table(CGEN_CPU_TABLE * cd)1474ed0d50c3Schristos build_ifield_table (CGEN_CPU_TABLE *cd)
1475ed0d50c3Schristos {
1476ed0d50c3Schristos   cd->ifld_table = & fr30_cgen_ifld_table[0];
1477ed0d50c3Schristos }
1478ed0d50c3Schristos 
1479ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
1480ed0d50c3Schristos 
1481ed0d50c3Schristos static void
build_operand_table(CGEN_CPU_TABLE * cd)1482ed0d50c3Schristos build_operand_table (CGEN_CPU_TABLE *cd)
1483ed0d50c3Schristos {
1484ed0d50c3Schristos   int i;
1485ed0d50c3Schristos   int machs = cd->machs;
1486ed0d50c3Schristos   const CGEN_OPERAND *init = & fr30_cgen_operand_table[0];
1487ed0d50c3Schristos   /* MAX_OPERANDS is only an upper bound on the number of selected entries.
1488ed0d50c3Schristos      However each entry is indexed by it's enum so there can be holes in
1489ed0d50c3Schristos      the table.  */
1490ed0d50c3Schristos   const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
1491ed0d50c3Schristos 
1492ed0d50c3Schristos   cd->operand_table.init_entries = init;
1493ed0d50c3Schristos   cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
1494ed0d50c3Schristos   memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
1495ed0d50c3Schristos   /* ??? For now we just use mach to determine which ones we want.  */
1496ed0d50c3Schristos   for (i = 0; init[i].name != NULL; ++i)
1497ed0d50c3Schristos     if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
1498ed0d50c3Schristos 	& machs)
1499ed0d50c3Schristos       selected[init[i].type] = &init[i];
1500ed0d50c3Schristos   cd->operand_table.entries = selected;
1501ed0d50c3Schristos   cd->operand_table.num_entries = MAX_OPERANDS;
1502ed0d50c3Schristos }
1503ed0d50c3Schristos 
1504ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.
1505ed0d50c3Schristos    ??? This could leave out insns not supported by the specified mach/isa,
1506ed0d50c3Schristos    but that would cause errors like "foo only supported by bar" to become
1507ed0d50c3Schristos    "unknown insn", so for now we include all insns and require the app to
1508ed0d50c3Schristos    do the checking later.
1509ed0d50c3Schristos    ??? On the other hand, parsing of such insns may require their hardware or
1510ed0d50c3Schristos    operand elements to be in the table [which they mightn't be].  */
1511ed0d50c3Schristos 
1512ed0d50c3Schristos static void
build_insn_table(CGEN_CPU_TABLE * cd)1513ed0d50c3Schristos build_insn_table (CGEN_CPU_TABLE *cd)
1514ed0d50c3Schristos {
1515ed0d50c3Schristos   int i;
1516ed0d50c3Schristos   const CGEN_IBASE *ib = & fr30_cgen_insn_table[0];
1517ed0d50c3Schristos   CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
1518ed0d50c3Schristos 
1519ed0d50c3Schristos   memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
1520ed0d50c3Schristos   for (i = 0; i < MAX_INSNS; ++i)
1521ed0d50c3Schristos     insns[i].base = &ib[i];
1522ed0d50c3Schristos   cd->insn_table.init_entries = insns;
1523ed0d50c3Schristos   cd->insn_table.entry_size = sizeof (CGEN_IBASE);
1524ed0d50c3Schristos   cd->insn_table.num_init_entries = MAX_INSNS;
1525ed0d50c3Schristos }
1526ed0d50c3Schristos 
1527ed0d50c3Schristos /* Subroutine of fr30_cgen_cpu_open to rebuild the tables.  */
1528ed0d50c3Schristos 
1529ed0d50c3Schristos static void
fr30_cgen_rebuild_tables(CGEN_CPU_TABLE * cd)1530ed0d50c3Schristos fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
1531ed0d50c3Schristos {
1532ed0d50c3Schristos   int i;
1533ed0d50c3Schristos   CGEN_BITSET *isas = cd->isas;
1534ed0d50c3Schristos   unsigned int machs = cd->machs;
1535ed0d50c3Schristos 
1536ed0d50c3Schristos   cd->int_insn_p = CGEN_INT_INSN_P;
1537ed0d50c3Schristos 
1538ed0d50c3Schristos   /* Data derived from the isa spec.  */
1539ed0d50c3Schristos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
1540ed0d50c3Schristos   cd->default_insn_bitsize = UNSET;
1541ed0d50c3Schristos   cd->base_insn_bitsize = UNSET;
1542ed0d50c3Schristos   cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
1543ed0d50c3Schristos   cd->max_insn_bitsize = 0;
1544ed0d50c3Schristos   for (i = 0; i < MAX_ISAS; ++i)
1545ed0d50c3Schristos     if (cgen_bitset_contains (isas, i))
1546ed0d50c3Schristos       {
1547ed0d50c3Schristos 	const CGEN_ISA *isa = & fr30_cgen_isa_table[i];
1548ed0d50c3Schristos 
1549ed0d50c3Schristos 	/* Default insn sizes of all selected isas must be
1550ed0d50c3Schristos 	   equal or we set the result to 0, meaning "unknown".  */
1551ed0d50c3Schristos 	if (cd->default_insn_bitsize == UNSET)
1552ed0d50c3Schristos 	  cd->default_insn_bitsize = isa->default_insn_bitsize;
1553ed0d50c3Schristos 	else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
1554ed0d50c3Schristos 	  ; /* This is ok.  */
1555ed0d50c3Schristos 	else
1556ed0d50c3Schristos 	  cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
1557ed0d50c3Schristos 
1558ed0d50c3Schristos 	/* Base insn sizes of all selected isas must be equal
1559ed0d50c3Schristos 	   or we set the result to 0, meaning "unknown".  */
1560ed0d50c3Schristos 	if (cd->base_insn_bitsize == UNSET)
1561ed0d50c3Schristos 	  cd->base_insn_bitsize = isa->base_insn_bitsize;
1562ed0d50c3Schristos 	else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
1563ed0d50c3Schristos 	  ; /* This is ok.  */
1564ed0d50c3Schristos 	else
1565ed0d50c3Schristos 	  cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
1566ed0d50c3Schristos 
1567ed0d50c3Schristos 	/* Set min,max insn sizes.  */
1568ed0d50c3Schristos 	if (isa->min_insn_bitsize < cd->min_insn_bitsize)
1569ed0d50c3Schristos 	  cd->min_insn_bitsize = isa->min_insn_bitsize;
1570ed0d50c3Schristos 	if (isa->max_insn_bitsize > cd->max_insn_bitsize)
1571ed0d50c3Schristos 	  cd->max_insn_bitsize = isa->max_insn_bitsize;
1572ed0d50c3Schristos       }
1573ed0d50c3Schristos 
1574ed0d50c3Schristos   /* Data derived from the mach spec.  */
1575ed0d50c3Schristos   for (i = 0; i < MAX_MACHS; ++i)
1576ed0d50c3Schristos     if (((1 << i) & machs) != 0)
1577ed0d50c3Schristos       {
1578ed0d50c3Schristos 	const CGEN_MACH *mach = & fr30_cgen_mach_table[i];
1579ed0d50c3Schristos 
1580ed0d50c3Schristos 	if (mach->insn_chunk_bitsize != 0)
1581ed0d50c3Schristos 	{
1582ed0d50c3Schristos 	  if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
1583ed0d50c3Schristos 	    {
158406324dcfSchristos 	      opcodes_error_handler
158506324dcfSchristos 		(/* xgettext:c-format */
158606324dcfSchristos 		 _("internal error: fr30_cgen_rebuild_tables: "
158706324dcfSchristos 		   "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
1588ed0d50c3Schristos 		 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
1589ed0d50c3Schristos 	      abort ();
1590ed0d50c3Schristos 	    }
1591ed0d50c3Schristos 
1592ed0d50c3Schristos  	  cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
1593ed0d50c3Schristos 	}
1594ed0d50c3Schristos       }
1595ed0d50c3Schristos 
1596ed0d50c3Schristos   /* Determine which hw elements are used by MACH.  */
1597ed0d50c3Schristos   build_hw_table (cd);
1598ed0d50c3Schristos 
1599ed0d50c3Schristos   /* Build the ifield table.  */
1600ed0d50c3Schristos   build_ifield_table (cd);
1601ed0d50c3Schristos 
1602ed0d50c3Schristos   /* Determine which operands are used by MACH/ISA.  */
1603ed0d50c3Schristos   build_operand_table (cd);
1604ed0d50c3Schristos 
1605ed0d50c3Schristos   /* Build the instruction table.  */
1606ed0d50c3Schristos   build_insn_table (cd);
1607ed0d50c3Schristos }
1608ed0d50c3Schristos 
1609ed0d50c3Schristos /* Initialize a cpu table and return a descriptor.
1610ed0d50c3Schristos    It's much like opening a file, and must be the first function called.
1611ed0d50c3Schristos    The arguments are a set of (type/value) pairs, terminated with
1612ed0d50c3Schristos    CGEN_CPU_OPEN_END.
1613ed0d50c3Schristos 
1614ed0d50c3Schristos    Currently supported values:
1615ed0d50c3Schristos    CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
1616ed0d50c3Schristos    CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
1617ed0d50c3Schristos    CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
1618ed0d50c3Schristos    CGEN_CPU_OPEN_ENDIAN:  specify endian choice
1619ed0d50c3Schristos    CGEN_CPU_OPEN_END:     terminates arguments
1620ed0d50c3Schristos 
1621ed0d50c3Schristos    ??? Simultaneous multiple isas might not make sense, but it's not (yet)
1622ed0d50c3Schristos    precluded.  */
1623ed0d50c3Schristos 
1624ed0d50c3Schristos CGEN_CPU_DESC
fr30_cgen_cpu_open(enum cgen_cpu_open_arg arg_type,...)1625ed0d50c3Schristos fr30_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
1626ed0d50c3Schristos {
1627ed0d50c3Schristos   CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
1628ed0d50c3Schristos   static int init_p;
1629ed0d50c3Schristos   CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
1630ed0d50c3Schristos   unsigned int machs = 0; /* 0 = "unspecified" */
1631ed0d50c3Schristos   enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
1632ed0d50c3Schristos   va_list ap;
1633ed0d50c3Schristos 
1634ed0d50c3Schristos   if (! init_p)
1635ed0d50c3Schristos     {
1636ed0d50c3Schristos       init_tables ();
1637ed0d50c3Schristos       init_p = 1;
1638ed0d50c3Schristos     }
1639ed0d50c3Schristos 
1640ed0d50c3Schristos   memset (cd, 0, sizeof (*cd));
1641ed0d50c3Schristos 
1642ed0d50c3Schristos   va_start (ap, arg_type);
1643ed0d50c3Schristos   while (arg_type != CGEN_CPU_OPEN_END)
1644ed0d50c3Schristos     {
1645ed0d50c3Schristos       switch (arg_type)
1646ed0d50c3Schristos 	{
1647ed0d50c3Schristos 	case CGEN_CPU_OPEN_ISAS :
1648ed0d50c3Schristos 	  isas = va_arg (ap, CGEN_BITSET *);
1649ed0d50c3Schristos 	  break;
1650ed0d50c3Schristos 	case CGEN_CPU_OPEN_MACHS :
1651ed0d50c3Schristos 	  machs = va_arg (ap, unsigned int);
1652ed0d50c3Schristos 	  break;
1653ed0d50c3Schristos 	case CGEN_CPU_OPEN_BFDMACH :
1654ed0d50c3Schristos 	  {
1655ed0d50c3Schristos 	    const char *name = va_arg (ap, const char *);
1656ed0d50c3Schristos 	    const CGEN_MACH *mach =
1657ed0d50c3Schristos 	      lookup_mach_via_bfd_name (fr30_cgen_mach_table, name);
1658ed0d50c3Schristos 
165906324dcfSchristos 	    if (mach != NULL)
1660ed0d50c3Schristos 	      machs |= 1 << mach->num;
1661ed0d50c3Schristos 	    break;
1662ed0d50c3Schristos 	  }
1663ed0d50c3Schristos 	case CGEN_CPU_OPEN_ENDIAN :
1664ed0d50c3Schristos 	  endian = va_arg (ap, enum cgen_endian);
1665ed0d50c3Schristos 	  break;
1666ed0d50c3Schristos 	default :
166706324dcfSchristos 	  opcodes_error_handler
166806324dcfSchristos 	    (/* xgettext:c-format */
166906324dcfSchristos 	     _("internal error: fr30_cgen_cpu_open: "
167006324dcfSchristos 	       "unsupported argument `%d'"),
1671ed0d50c3Schristos 	     arg_type);
1672ed0d50c3Schristos 	  abort (); /* ??? return NULL? */
1673ed0d50c3Schristos 	}
1674ed0d50c3Schristos       arg_type = va_arg (ap, enum cgen_cpu_open_arg);
1675ed0d50c3Schristos     }
1676ed0d50c3Schristos   va_end (ap);
1677ed0d50c3Schristos 
1678ed0d50c3Schristos   /* Mach unspecified means "all".  */
1679ed0d50c3Schristos   if (machs == 0)
1680ed0d50c3Schristos     machs = (1 << MAX_MACHS) - 1;
1681ed0d50c3Schristos   /* Base mach is always selected.  */
1682ed0d50c3Schristos   machs |= 1;
1683ed0d50c3Schristos   if (endian == CGEN_ENDIAN_UNKNOWN)
1684ed0d50c3Schristos     {
1685ed0d50c3Schristos       /* ??? If target has only one, could have a default.  */
168606324dcfSchristos       opcodes_error_handler
168706324dcfSchristos 	(/* xgettext:c-format */
168806324dcfSchristos 	 _("internal error: fr30_cgen_cpu_open: no endianness specified"));
1689ed0d50c3Schristos       abort ();
1690ed0d50c3Schristos     }
1691ed0d50c3Schristos 
1692ed0d50c3Schristos   cd->isas = cgen_bitset_copy (isas);
1693ed0d50c3Schristos   cd->machs = machs;
1694ed0d50c3Schristos   cd->endian = endian;
1695ed0d50c3Schristos   /* FIXME: for the sparc case we can determine insn-endianness statically.
1696ed0d50c3Schristos      The worry here is where both data and insn endian can be independently
1697ed0d50c3Schristos      chosen, in which case this function will need another argument.
1698ed0d50c3Schristos      Actually, will want to allow for more arguments in the future anyway.  */
1699ed0d50c3Schristos   cd->insn_endian = endian;
1700ed0d50c3Schristos 
1701ed0d50c3Schristos   /* Table (re)builder.  */
1702ed0d50c3Schristos   cd->rebuild_tables = fr30_cgen_rebuild_tables;
1703ed0d50c3Schristos   fr30_cgen_rebuild_tables (cd);
1704ed0d50c3Schristos 
1705ed0d50c3Schristos   /* Default to not allowing signed overflow.  */
1706ed0d50c3Schristos   cd->signed_overflow_ok_p = 0;
1707ed0d50c3Schristos 
1708ed0d50c3Schristos   return (CGEN_CPU_DESC) cd;
1709ed0d50c3Schristos }
1710ed0d50c3Schristos 
1711ed0d50c3Schristos /* Cover fn to fr30_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
1712ed0d50c3Schristos    MACH_NAME is the bfd name of the mach.  */
1713ed0d50c3Schristos 
1714ed0d50c3Schristos CGEN_CPU_DESC
fr30_cgen_cpu_open_1(const char * mach_name,enum cgen_endian endian)1715ed0d50c3Schristos fr30_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
1716ed0d50c3Schristos {
1717ed0d50c3Schristos   return fr30_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
1718ed0d50c3Schristos 			       CGEN_CPU_OPEN_ENDIAN, endian,
1719ed0d50c3Schristos 			       CGEN_CPU_OPEN_END);
1720ed0d50c3Schristos }
1721ed0d50c3Schristos 
1722ed0d50c3Schristos /* Close a cpu table.
1723ed0d50c3Schristos    ??? This can live in a machine independent file, but there's currently
1724ed0d50c3Schristos    no place to put this file (there's no libcgen).  libopcodes is the wrong
1725ed0d50c3Schristos    place as some simulator ports use this but they don't use libopcodes.  */
1726ed0d50c3Schristos 
1727ed0d50c3Schristos void
fr30_cgen_cpu_close(CGEN_CPU_DESC cd)1728ed0d50c3Schristos fr30_cgen_cpu_close (CGEN_CPU_DESC cd)
1729ed0d50c3Schristos {
1730ed0d50c3Schristos   unsigned int i;
1731ed0d50c3Schristos   const CGEN_INSN *insns;
1732ed0d50c3Schristos 
1733ed0d50c3Schristos   if (cd->macro_insn_table.init_entries)
1734ed0d50c3Schristos     {
1735ed0d50c3Schristos       insns = cd->macro_insn_table.init_entries;
1736ed0d50c3Schristos       for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
1737ed0d50c3Schristos 	if (CGEN_INSN_RX ((insns)))
1738ed0d50c3Schristos 	  regfree (CGEN_INSN_RX (insns));
1739ed0d50c3Schristos     }
1740ed0d50c3Schristos 
1741ed0d50c3Schristos   if (cd->insn_table.init_entries)
1742ed0d50c3Schristos     {
1743ed0d50c3Schristos       insns = cd->insn_table.init_entries;
1744ed0d50c3Schristos       for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
1745ed0d50c3Schristos 	if (CGEN_INSN_RX (insns))
1746ed0d50c3Schristos 	  regfree (CGEN_INSN_RX (insns));
1747ed0d50c3Schristos     }
1748ed0d50c3Schristos 
1749ed0d50c3Schristos   if (cd->macro_insn_table.init_entries)
1750ed0d50c3Schristos     free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
1751ed0d50c3Schristos 
1752ed0d50c3Schristos   if (cd->insn_table.init_entries)
1753ed0d50c3Schristos     free ((CGEN_INSN *) cd->insn_table.init_entries);
1754ed0d50c3Schristos 
1755ed0d50c3Schristos   if (cd->hw_table.entries)
1756ed0d50c3Schristos     free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
1757ed0d50c3Schristos 
1758ed0d50c3Schristos   if (cd->operand_table.entries)
1759ed0d50c3Schristos     free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
1760ed0d50c3Schristos 
1761ed0d50c3Schristos   free (cd);
1762ed0d50c3Schristos }
1763ed0d50c3Schristos 
1764