epiphany-desc.c revision 1.1.1.6 1 1.1.1.5 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 1.1 christos /* CPU data for epiphany.
3 1.1 christos
4 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
5 1.1 christos
6 1.1.1.6 christos Copyright (C) 1996-2020 Free Software Foundation, Inc.
7 1.1 christos
8 1.1 christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 1.1 christos
10 1.1 christos This file is free software; you can redistribute it and/or modify
11 1.1 christos it under the terms of the GNU General Public License as published by
12 1.1 christos the Free Software Foundation; either version 3, or (at your option)
13 1.1 christos any later version.
14 1.1 christos
15 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
16 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 1.1 christos License for more details.
19 1.1 christos
20 1.1 christos You should have received a copy of the GNU General Public License along
21 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
22 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23 1.1 christos
24 1.1 christos */
25 1.1 christos
26 1.1 christos #include "sysdep.h"
27 1.1 christos #include <stdio.h>
28 1.1 christos #include <stdarg.h>
29 1.1 christos #include "ansidecl.h"
30 1.1 christos #include "bfd.h"
31 1.1 christos #include "symcat.h"
32 1.1 christos #include "epiphany-desc.h"
33 1.1 christos #include "epiphany-opc.h"
34 1.1 christos #include "opintl.h"
35 1.1 christos #include "libiberty.h"
36 1.1 christos #include "xregex.h"
37 1.1 christos
38 1.1 christos /* Attributes. */
39 1.1 christos
40 1.1 christos static const CGEN_ATTR_ENTRY bool_attr[] =
41 1.1 christos {
42 1.1 christos { "#f", 0 },
43 1.1 christos { "#t", 1 },
44 1.1 christos { 0, 0 }
45 1.1 christos };
46 1.1 christos
47 1.1 christos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
48 1.1 christos {
49 1.1 christos { "base", MACH_BASE },
50 1.1 christos { "epiphany32", MACH_EPIPHANY32 },
51 1.1 christos { "max", MACH_MAX },
52 1.1 christos { 0, 0 }
53 1.1 christos };
54 1.1 christos
55 1.1 christos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
56 1.1 christos {
57 1.1 christos { "epiphany", ISA_EPIPHANY },
58 1.1 christos { "max", ISA_MAX },
59 1.1 christos { 0, 0 }
60 1.1 christos };
61 1.1 christos
62 1.1 christos const CGEN_ATTR_TABLE epiphany_cgen_ifield_attr_table[] =
63 1.1 christos {
64 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
65 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
66 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
67 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
68 1.1 christos { "RESERVED", &bool_attr[0], &bool_attr[0] },
69 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
70 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] },
71 1.1 christos { "RELOC", &bool_attr[0], &bool_attr[0] },
72 1.1 christos { 0, 0, 0 }
73 1.1 christos };
74 1.1 christos
75 1.1 christos const CGEN_ATTR_TABLE epiphany_cgen_hardware_attr_table[] =
76 1.1 christos {
77 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
78 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
79 1.1 christos { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
80 1.1 christos { "PC", &bool_attr[0], &bool_attr[0] },
81 1.1 christos { "PROFILE", &bool_attr[0], &bool_attr[0] },
82 1.1 christos { 0, 0, 0 }
83 1.1 christos };
84 1.1 christos
85 1.1 christos const CGEN_ATTR_TABLE epiphany_cgen_operand_attr_table[] =
86 1.1 christos {
87 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
88 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
89 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
90 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
91 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
92 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] },
93 1.1 christos { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
94 1.1 christos { "RELAX", &bool_attr[0], &bool_attr[0] },
95 1.1 christos { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
96 1.1 christos { "RELOC", &bool_attr[0], &bool_attr[0] },
97 1.1 christos { 0, 0, 0 }
98 1.1 christos };
99 1.1 christos
100 1.1 christos const CGEN_ATTR_TABLE epiphany_cgen_insn_attr_table[] =
101 1.1 christos {
102 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
103 1.1 christos { "ALIAS", &bool_attr[0], &bool_attr[0] },
104 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
105 1.1 christos { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
106 1.1 christos { "COND-CTI", &bool_attr[0], &bool_attr[0] },
107 1.1 christos { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
108 1.1 christos { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
109 1.1 christos { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
110 1.1 christos { "RELAXED", &bool_attr[0], &bool_attr[0] },
111 1.1 christos { "NO-DIS", &bool_attr[0], &bool_attr[0] },
112 1.1 christos { "PBB", &bool_attr[0], &bool_attr[0] },
113 1.1 christos { "SHORT-INSN", &bool_attr[0], &bool_attr[0] },
114 1.1 christos { "IMM3", &bool_attr[0], &bool_attr[0] },
115 1.1 christos { "IMM8", &bool_attr[0], &bool_attr[0] },
116 1.1 christos { 0, 0, 0 }
117 1.1 christos };
118 1.1 christos
119 1.1 christos /* Instruction set variants. */
120 1.1 christos
121 1.1 christos static const CGEN_ISA epiphany_cgen_isa_table[] = {
122 1.1 christos { "epiphany", 32, 32, 16, 32 },
123 1.1 christos { 0, 0, 0, 0, 0 }
124 1.1 christos };
125 1.1 christos
126 1.1 christos /* Machine variants. */
127 1.1 christos
128 1.1 christos static const CGEN_MACH epiphany_cgen_mach_table[] = {
129 1.1 christos { "epiphany32", "epiphany32", MACH_EPIPHANY32, 0 },
130 1.1 christos { 0, 0, 0, 0 }
131 1.1 christos };
132 1.1 christos
133 1.1 christos static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_gr_names_entries[] =
134 1.1 christos {
135 1.1 christos { "fp", 11, {0, {{{0, 0}}}}, 0, 0 },
136 1.1 christos { "sp", 13, {0, {{{0, 0}}}}, 0, 0 },
137 1.1 christos { "lr", 14, {0, {{{0, 0}}}}, 0, 0 },
138 1.1 christos { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
139 1.1 christos { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
140 1.1 christos { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
141 1.1 christos { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
142 1.1 christos { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
143 1.1 christos { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
144 1.1 christos { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
145 1.1 christos { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
146 1.1 christos { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
147 1.1 christos { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
148 1.1 christos { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
149 1.1 christos { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
150 1.1 christos { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
151 1.1 christos { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
152 1.1 christos { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
153 1.1 christos { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
154 1.1 christos { "r16", 16, {0, {{{0, 0}}}}, 0, 0 },
155 1.1 christos { "r17", 17, {0, {{{0, 0}}}}, 0, 0 },
156 1.1 christos { "r18", 18, {0, {{{0, 0}}}}, 0, 0 },
157 1.1 christos { "r19", 19, {0, {{{0, 0}}}}, 0, 0 },
158 1.1 christos { "r20", 20, {0, {{{0, 0}}}}, 0, 0 },
159 1.1 christos { "r21", 21, {0, {{{0, 0}}}}, 0, 0 },
160 1.1 christos { "r22", 22, {0, {{{0, 0}}}}, 0, 0 },
161 1.1 christos { "r23", 23, {0, {{{0, 0}}}}, 0, 0 },
162 1.1 christos { "r24", 24, {0, {{{0, 0}}}}, 0, 0 },
163 1.1 christos { "r25", 25, {0, {{{0, 0}}}}, 0, 0 },
164 1.1 christos { "r26", 26, {0, {{{0, 0}}}}, 0, 0 },
165 1.1 christos { "r27", 27, {0, {{{0, 0}}}}, 0, 0 },
166 1.1 christos { "r28", 28, {0, {{{0, 0}}}}, 0, 0 },
167 1.1 christos { "r29", 29, {0, {{{0, 0}}}}, 0, 0 },
168 1.1 christos { "r30", 30, {0, {{{0, 0}}}}, 0, 0 },
169 1.1 christos { "r31", 31, {0, {{{0, 0}}}}, 0, 0 },
170 1.1 christos { "r32", 32, {0, {{{0, 0}}}}, 0, 0 },
171 1.1 christos { "r33", 33, {0, {{{0, 0}}}}, 0, 0 },
172 1.1 christos { "r34", 34, {0, {{{0, 0}}}}, 0, 0 },
173 1.1 christos { "r35", 35, {0, {{{0, 0}}}}, 0, 0 },
174 1.1 christos { "r36", 36, {0, {{{0, 0}}}}, 0, 0 },
175 1.1 christos { "r37", 37, {0, {{{0, 0}}}}, 0, 0 },
176 1.1 christos { "r38", 38, {0, {{{0, 0}}}}, 0, 0 },
177 1.1 christos { "r39", 39, {0, {{{0, 0}}}}, 0, 0 },
178 1.1 christos { "r40", 40, {0, {{{0, 0}}}}, 0, 0 },
179 1.1 christos { "r41", 41, {0, {{{0, 0}}}}, 0, 0 },
180 1.1 christos { "r42", 42, {0, {{{0, 0}}}}, 0, 0 },
181 1.1 christos { "r43", 43, {0, {{{0, 0}}}}, 0, 0 },
182 1.1 christos { "r44", 44, {0, {{{0, 0}}}}, 0, 0 },
183 1.1 christos { "r45", 45, {0, {{{0, 0}}}}, 0, 0 },
184 1.1 christos { "r46", 46, {0, {{{0, 0}}}}, 0, 0 },
185 1.1 christos { "r47", 47, {0, {{{0, 0}}}}, 0, 0 },
186 1.1 christos { "r48", 48, {0, {{{0, 0}}}}, 0, 0 },
187 1.1 christos { "r49", 49, {0, {{{0, 0}}}}, 0, 0 },
188 1.1 christos { "r50", 50, {0, {{{0, 0}}}}, 0, 0 },
189 1.1 christos { "r51", 51, {0, {{{0, 0}}}}, 0, 0 },
190 1.1 christos { "r52", 52, {0, {{{0, 0}}}}, 0, 0 },
191 1.1 christos { "r53", 53, {0, {{{0, 0}}}}, 0, 0 },
192 1.1 christos { "r54", 54, {0, {{{0, 0}}}}, 0, 0 },
193 1.1 christos { "r55", 55, {0, {{{0, 0}}}}, 0, 0 },
194 1.1 christos { "r56", 56, {0, {{{0, 0}}}}, 0, 0 },
195 1.1 christos { "r57", 57, {0, {{{0, 0}}}}, 0, 0 },
196 1.1 christos { "r58", 58, {0, {{{0, 0}}}}, 0, 0 },
197 1.1 christos { "r59", 59, {0, {{{0, 0}}}}, 0, 0 },
198 1.1 christos { "r60", 60, {0, {{{0, 0}}}}, 0, 0 },
199 1.1 christos { "r61", 61, {0, {{{0, 0}}}}, 0, 0 },
200 1.1 christos { "r62", 62, {0, {{{0, 0}}}}, 0, 0 },
201 1.1 christos { "r63", 63, {0, {{{0, 0}}}}, 0, 0 },
202 1.1 christos { "a1", 0, {0, {{{0, 0}}}}, 0, 0 },
203 1.1 christos { "a2", 1, {0, {{{0, 0}}}}, 0, 0 },
204 1.1 christos { "a3", 2, {0, {{{0, 0}}}}, 0, 0 },
205 1.1 christos { "a4", 3, {0, {{{0, 0}}}}, 0, 0 },
206 1.1 christos { "v1", 4, {0, {{{0, 0}}}}, 0, 0 },
207 1.1 christos { "v2", 5, {0, {{{0, 0}}}}, 0, 0 },
208 1.1 christos { "v3", 6, {0, {{{0, 0}}}}, 0, 0 },
209 1.1 christos { "v4", 7, {0, {{{0, 0}}}}, 0, 0 },
210 1.1 christos { "v5", 8, {0, {{{0, 0}}}}, 0, 0 },
211 1.1 christos { "v6", 9, {0, {{{0, 0}}}}, 0, 0 },
212 1.1 christos { "v7", 10, {0, {{{0, 0}}}}, 0, 0 },
213 1.1 christos { "v8", 11, {0, {{{0, 0}}}}, 0, 0 },
214 1.1 christos { "sb", 9, {0, {{{0, 0}}}}, 0, 0 },
215 1.1 christos { "sl", 10, {0, {{{0, 0}}}}, 0, 0 },
216 1.1 christos { "ip", 12, {0, {{{0, 0}}}}, 0, 0 }
217 1.1 christos };
218 1.1 christos
219 1.1 christos CGEN_KEYWORD epiphany_cgen_opval_gr_names =
220 1.1 christos {
221 1.1 christos & epiphany_cgen_opval_gr_names_entries[0],
222 1.1 christos 82,
223 1.1 christos 0, 0, 0, 0, ""
224 1.1 christos };
225 1.1 christos
226 1.1 christos static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_cr_names_entries[] =
227 1.1 christos {
228 1.1 christos { "config", 0, {0, {{{0, 0}}}}, 0, 0 },
229 1.1 christos { "status", 1, {0, {{{0, 0}}}}, 0, 0 },
230 1.1 christos { "pc", 2, {0, {{{0, 0}}}}, 0, 0 },
231 1.1 christos { "debug", 3, {0, {{{0, 0}}}}, 0, 0 },
232 1.1 christos { "iab", 4, {0, {{{0, 0}}}}, 0, 0 },
233 1.1 christos { "lc", 5, {0, {{{0, 0}}}}, 0, 0 },
234 1.1 christos { "ls", 6, {0, {{{0, 0}}}}, 0, 0 },
235 1.1 christos { "le", 7, {0, {{{0, 0}}}}, 0, 0 },
236 1.1 christos { "iret", 8, {0, {{{0, 0}}}}, 0, 0 },
237 1.1 christos { "imask", 9, {0, {{{0, 0}}}}, 0, 0 },
238 1.1 christos { "ilat", 10, {0, {{{0, 0}}}}, 0, 0 },
239 1.1 christos { "ilatst", 11, {0, {{{0, 0}}}}, 0, 0 },
240 1.1 christos { "ilatcl", 12, {0, {{{0, 0}}}}, 0, 0 },
241 1.1 christos { "ipend", 13, {0, {{{0, 0}}}}, 0, 0 },
242 1.1 christos { "ctimer0", 14, {0, {{{0, 0}}}}, 0, 0 },
243 1.1 christos { "ctimer1", 15, {0, {{{0, 0}}}}, 0, 0 },
244 1.1 christos { "hstatus", 16, {0, {{{0, 0}}}}, 0, 0 }
245 1.1 christos };
246 1.1 christos
247 1.1 christos CGEN_KEYWORD epiphany_cgen_opval_cr_names =
248 1.1 christos {
249 1.1 christos & epiphany_cgen_opval_cr_names_entries[0],
250 1.1 christos 17,
251 1.1 christos 0, 0, 0, 0, ""
252 1.1 christos };
253 1.1 christos
254 1.1 christos static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crdma_names_entries[] =
255 1.1 christos {
256 1.1 christos { "dma0config", 0, {0, {{{0, 0}}}}, 0, 0 },
257 1.1 christos { "dma0stride", 1, {0, {{{0, 0}}}}, 0, 0 },
258 1.1 christos { "dma0count", 2, {0, {{{0, 0}}}}, 0, 0 },
259 1.1 christos { "dma0srcaddr", 3, {0, {{{0, 0}}}}, 0, 0 },
260 1.1 christos { "dma0dstaddr", 4, {0, {{{0, 0}}}}, 0, 0 },
261 1.1 christos { "dma0auto0", 5, {0, {{{0, 0}}}}, 0, 0 },
262 1.1 christos { "dma0auto1", 6, {0, {{{0, 0}}}}, 0, 0 },
263 1.1 christos { "dma0status", 7, {0, {{{0, 0}}}}, 0, 0 },
264 1.1 christos { "dma1config", 8, {0, {{{0, 0}}}}, 0, 0 },
265 1.1 christos { "dma1stride", 9, {0, {{{0, 0}}}}, 0, 0 },
266 1.1 christos { "dma1count", 10, {0, {{{0, 0}}}}, 0, 0 },
267 1.1 christos { "dma1srcaddr", 11, {0, {{{0, 0}}}}, 0, 0 },
268 1.1 christos { "dma1dstaddr", 12, {0, {{{0, 0}}}}, 0, 0 },
269 1.1 christos { "dma1auto0", 13, {0, {{{0, 0}}}}, 0, 0 },
270 1.1 christos { "dma1auto1", 14, {0, {{{0, 0}}}}, 0, 0 },
271 1.1 christos { "dma1status", 15, {0, {{{0, 0}}}}, 0, 0 }
272 1.1 christos };
273 1.1 christos
274 1.1 christos CGEN_KEYWORD epiphany_cgen_opval_crdma_names =
275 1.1 christos {
276 1.1 christos & epiphany_cgen_opval_crdma_names_entries[0],
277 1.1 christos 16,
278 1.1 christos 0, 0, 0, 0, ""
279 1.1 christos };
280 1.1 christos
281 1.1 christos static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crmem_names_entries[] =
282 1.1 christos {
283 1.1 christos { "memconfig", 0, {0, {{{0, 0}}}}, 0, 0 },
284 1.1 christos { "memstatus", 1, {0, {{{0, 0}}}}, 0, 0 },
285 1.1 christos { "memprotect", 2, {0, {{{0, 0}}}}, 0, 0 },
286 1.1 christos { "memreserve", 3, {0, {{{0, 0}}}}, 0, 0 }
287 1.1 christos };
288 1.1 christos
289 1.1 christos CGEN_KEYWORD epiphany_cgen_opval_crmem_names =
290 1.1 christos {
291 1.1 christos & epiphany_cgen_opval_crmem_names_entries[0],
292 1.1 christos 4,
293 1.1 christos 0, 0, 0, 0, ""
294 1.1 christos };
295 1.1 christos
296 1.1 christos static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crmesh_names_entries[] =
297 1.1 christos {
298 1.1 christos { "meshconfig", 0, {0, {{{0, 0}}}}, 0, 0 },
299 1.1 christos { "coreid", 1, {0, {{{0, 0}}}}, 0, 0 },
300 1.1 christos { "meshmulticast", 2, {0, {{{0, 0}}}}, 0, 0 },
301 1.1 christos { "swreset", 3, {0, {{{0, 0}}}}, 0, 0 }
302 1.1 christos };
303 1.1 christos
304 1.1 christos CGEN_KEYWORD epiphany_cgen_opval_crmesh_names =
305 1.1 christos {
306 1.1 christos & epiphany_cgen_opval_crmesh_names_entries[0],
307 1.1 christos 4,
308 1.1 christos 0, 0, 0, 0, ""
309 1.1 christos };
310 1.1 christos
311 1.1 christos
312 1.1 christos /* The hardware table. */
313 1.1 christos
314 1.1 christos #define A(a) (1 << CGEN_HW_##a)
315 1.1 christos
316 1.1 christos const CGEN_HW_ENTRY epiphany_cgen_hw_table[] =
317 1.1 christos {
318 1.1 christos { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
319 1.1 christos { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
320 1.1 christos { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
321 1.1 christos { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
322 1.1 christos { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
323 1.1 christos { "h-registers", HW_H_REGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
324 1.1 christos { "h-fpregisters", HW_H_FPREGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_gr_names, { 0|A(VIRTUAL)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
325 1.1 christos { "h-zbit", HW_H_ZBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
326 1.1 christos { "h-nbit", HW_H_NBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
327 1.1 christos { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
328 1.1 christos { "h-vbit", HW_H_VBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
329 1.1 christos { "h-vsbit", HW_H_VSBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
330 1.1 christos { "h-bzbit", HW_H_BZBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
331 1.1 christos { "h-bnbit", HW_H_BNBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
332 1.1 christos { "h-bvbit", HW_H_BVBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
333 1.1 christos { "h-bubit", HW_H_BUBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
334 1.1 christos { "h-bibit", HW_H_BIBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
335 1.1 christos { "h-bcbit", HW_H_BCBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
336 1.1 christos { "h-bvsbit", HW_H_BVSBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
337 1.1 christos { "h-bisbit", HW_H_BISBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
338 1.1 christos { "h-busbit", HW_H_BUSBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
339 1.1 christos { "h-expcause0bit", HW_H_EXPCAUSE0BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
340 1.1 christos { "h-expcause1bit", HW_H_EXPCAUSE1BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
341 1.1 christos { "h-expcause2bit", HW_H_EXPCAUSE2BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
342 1.1 christos { "h-extFstallbit", HW_H_EXTFSTALLBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
343 1.1 christos { "h-trmbit", HW_H_TRMBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
344 1.1 christos { "h-invExcEnbit", HW_H_INVEXCENBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
345 1.1 christos { "h-ovfExcEnbit", HW_H_OVFEXCENBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
346 1.1 christos { "h-unExcEnbit", HW_H_UNEXCENBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
347 1.1 christos { "h-timer0bit0", HW_H_TIMER0BIT0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
348 1.1 christos { "h-timer0bit1", HW_H_TIMER0BIT1, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
349 1.1 christos { "h-timer0bit2", HW_H_TIMER0BIT2, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
350 1.1 christos { "h-timer0bit3", HW_H_TIMER0BIT3, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
351 1.1 christos { "h-timer1bit0", HW_H_TIMER1BIT0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
352 1.1 christos { "h-timer1bit1", HW_H_TIMER1BIT1, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
353 1.1 christos { "h-timer1bit2", HW_H_TIMER1BIT2, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
354 1.1 christos { "h-timer1bit3", HW_H_TIMER1BIT3, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
355 1.1 christos { "h-mbkptEnbit", HW_H_MBKPTENBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
356 1.1 christos { "h-clockGateEnbit", HW_H_CLOCKGATEENBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
357 1.1 christos { "h-coreCfgResBit12", HW_H_CORECFGRESBIT12, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
358 1.1 christos { "h-coreCfgResBit13", HW_H_CORECFGRESBIT13, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
359 1.1 christos { "h-coreCfgResBit14", HW_H_CORECFGRESBIT14, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
360 1.1 christos { "h-coreCfgResBit15", HW_H_CORECFGRESBIT15, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
361 1.1 christos { "h-coreCfgResBit16", HW_H_CORECFGRESBIT16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
362 1.1 christos { "h-coreCfgResBit20", HW_H_CORECFGRESBIT20, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
363 1.1 christos { "h-coreCfgResBit21", HW_H_CORECFGRESBIT21, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
364 1.1 christos { "h-coreCfgResBit24", HW_H_CORECFGRESBIT24, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
365 1.1 christos { "h-coreCfgResBit25", HW_H_CORECFGRESBIT25, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
366 1.1 christos { "h-coreCfgResBit26", HW_H_CORECFGRESBIT26, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
367 1.1 christos { "h-coreCfgResBit27", HW_H_CORECFGRESBIT27, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
368 1.1 christos { "h-coreCfgResBit28", HW_H_CORECFGRESBIT28, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
369 1.1 christos { "h-coreCfgResBit29", HW_H_CORECFGRESBIT29, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
370 1.1 christos { "h-coreCfgResBit30", HW_H_CORECFGRESBIT30, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
371 1.1 christos { "h-coreCfgResBit31", HW_H_CORECFGRESBIT31, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
372 1.1 christos { "h-arithmetic-modebit0", HW_H_ARITHMETIC_MODEBIT0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
373 1.1 christos { "h-arithmetic-modebit1", HW_H_ARITHMETIC_MODEBIT1, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
374 1.1 christos { "h-arithmetic-modebit2", HW_H_ARITHMETIC_MODEBIT2, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
375 1.1 christos { "h-gidisablebit", HW_H_GIDISABLEBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
376 1.1 christos { "h-kmbit", HW_H_KMBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
377 1.1 christos { "h-caibit", HW_H_CAIBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
378 1.1 christos { "h-sflagbit", HW_H_SFLAGBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
379 1.1 christos { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
380 1.1 christos { "h-memaddr", HW_H_MEMADDR, CGEN_ASM_NONE, 0, { 0|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
381 1.1 christos { "h-core-registers", HW_H_CORE_REGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
382 1.1 christos { "h-coredma-registers", HW_H_COREDMA_REGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_crdma_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
383 1.1 christos { "h-coremem-registers", HW_H_COREMEM_REGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_crmem_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
384 1.1 christos { "h-coremesh-registers", HW_H_COREMESH_REGISTERS, CGEN_ASM_KEYWORD, (PTR) & epiphany_cgen_opval_crmesh_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
385 1.1 christos { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
386 1.1 christos };
387 1.1 christos
388 1.1 christos #undef A
389 1.1 christos
390 1.1 christos
391 1.1 christos /* The instruction field table. */
392 1.1 christos
393 1.1 christos #define A(a) (1 << CGEN_IFLD_##a)
394 1.1 christos
395 1.1 christos const CGEN_IFLD epiphany_cgen_ifld_table[] =
396 1.1 christos {
397 1.1 christos { EPIPHANY_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
398 1.1 christos { EPIPHANY_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
399 1.1 christos { EPIPHANY_F_OPC, "f-opc", 0, 32, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
400 1.1 christos { EPIPHANY_F_OPC_4_1, "f-opc-4-1", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
401 1.1 christos { EPIPHANY_F_OPC_6_3, "f-opc-6-3", 0, 32, 6, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
402 1.1 christos { EPIPHANY_F_OPC_8_5, "f-opc-8-5", 0, 32, 8, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
403 1.1 christos { EPIPHANY_F_OPC_19_4, "f-opc-19-4", 0, 32, 19, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
404 1.1 christos { EPIPHANY_F_CONDCODE, "f-condcode", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
405 1.1 christos { EPIPHANY_F_SECONDARY_CCS, "f-secondary-ccs", 0, 32, 7, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
406 1.1 christos { EPIPHANY_F_SHIFT, "f-shift", 0, 32, 9, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
407 1.1 christos { EPIPHANY_F_WORDSIZE, "f-wordsize", 0, 32, 6, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
408 1.1 christos { EPIPHANY_F_STORE, "f-store", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
409 1.1 christos { EPIPHANY_F_OPC_8_1, "f-opc-8-1", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
410 1.1 christos { EPIPHANY_F_OPC_31_32, "f-opc-31-32", 0, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } } } } },
411 1.1 christos { EPIPHANY_F_SIMM8, "f-simm8", 0, 32, 15, 8, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
412 1.1 christos { EPIPHANY_F_SIMM24, "f-simm24", 0, 32, 31, 24, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
413 1.1 christos { EPIPHANY_F_SDISP3, "f-sdisp3", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
414 1.1 christos { EPIPHANY_F_DISP3, "f-disp3", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
415 1.1 christos { EPIPHANY_F_DISP8, "f-disp8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
416 1.1 christos { EPIPHANY_F_IMM8, "f-imm8", 0, 32, 12, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
417 1.1 christos { EPIPHANY_F_IMM_27_8, "f-imm-27-8", 0, 32, 27, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
418 1.1 christos { EPIPHANY_F_ADDSUBX, "f-addsubx", 0, 32, 20, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
419 1.1 christos { EPIPHANY_F_SUBD, "f-subd", 0, 32, 24, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
420 1.1 christos { EPIPHANY_F_PM, "f-pm", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
421 1.1 christos { EPIPHANY_F_RM, "f-rm", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
422 1.1 christos { EPIPHANY_F_RN, "f-rn", 0, 32, 12, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
423 1.1 christos { EPIPHANY_F_RD, "f-rd", 0, 32, 15, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
424 1.1 christos { EPIPHANY_F_RM_X, "f-rm-x", 0, 32, 25, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
425 1.1 christos { EPIPHANY_F_RN_X, "f-rn-x", 0, 32, 28, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
426 1.1 christos { EPIPHANY_F_RD_X, "f-rd-x", 0, 32, 31, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
427 1.1 christos { EPIPHANY_F_DC_9_1, "f-dc-9-1", 0, 32, 9, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
428 1.1 christos { EPIPHANY_F_SN, "f-sn", 0, 32, 12, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
429 1.1 christos { EPIPHANY_F_SD, "f-sd", 0, 32, 15, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
430 1.1 christos { EPIPHANY_F_SN_X, "f-sn-x", 0, 32, 28, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
431 1.1 christos { EPIPHANY_F_SD_X, "f-sd-x", 0, 32, 31, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
432 1.1 christos { EPIPHANY_F_DC_7_4, "f-dc-7-4", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
433 1.1 christos { EPIPHANY_F_TRAP_SWI_9_1, "f-trap-swi-9-1", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
434 1.1 christos { EPIPHANY_F_GIEN_GIDIS_9_1, "f-gien-gidis-9-1", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
435 1.1 christos { EPIPHANY_F_DC_15_3, "f-dc-15-3", 0, 32, 15, 3, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
436 1.1 christos { EPIPHANY_F_DC_15_7, "f-dc-15-7", 0, 32, 15, 7, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
437 1.1 christos { EPIPHANY_F_DC_15_6, "f-dc-15-6", 0, 32, 15, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } },
438 1.1 christos { EPIPHANY_F_TRAP_NUM, "f-trap-num", 0, 32, 15, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } },
439 1.1 christos { EPIPHANY_F_DC_20_1, "f-dc-20-1", 0, 32, 20, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
440 1.1 christos { EPIPHANY_F_DC_21_1, "f-dc-21-1", 0, 32, 21, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
441 1.1 christos { EPIPHANY_F_DC_21_2, "f-dc-21-2", 0, 32, 21, 2, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
442 1.1 christos { EPIPHANY_F_DC_22_3, "f-dc-22-3", 0, 32, 22, 3, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
443 1.1 christos { EPIPHANY_F_DC_22_2, "f-dc-22-2", 0, 32, 22, 2, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
444 1.1 christos { EPIPHANY_F_DC_22_1, "f-dc-22-1", 0, 32, 22, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
445 1.1 christos { EPIPHANY_F_DC_25_6, "f-dc-25-6", 0, 32, 25, 6, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
446 1.1 christos { EPIPHANY_F_DC_25_4, "f-dc-25-4", 0, 32, 25, 4, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
447 1.1 christos { EPIPHANY_F_DC_25_2, "f-dc-25-2", 0, 32, 25, 2, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
448 1.1 christos { EPIPHANY_F_DC_25_1, "f-dc-25-1", 0, 32, 25, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
449 1.1 christos { EPIPHANY_F_DC_28_1, "f-dc-28-1", 0, 32, 28, 1, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
450 1.1 christos { EPIPHANY_F_DC_31_3, "f-dc-31-3", 0, 32, 31, 3, { 0|A(RESERVED), { { { (1<<MACH_BASE), 0 } } } } },
451 1.1 christos { EPIPHANY_F_DISP11, "f-disp11", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
452 1.1 christos { EPIPHANY_F_SDISP11, "f-sdisp11", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
453 1.1 christos { EPIPHANY_F_IMM16, "f-imm16", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
454 1.1 christos { EPIPHANY_F_RD6, "f-rd6", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
455 1.1 christos { EPIPHANY_F_RN6, "f-rn6", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
456 1.1 christos { EPIPHANY_F_RM6, "f-rm6", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
457 1.1 christos { EPIPHANY_F_SD6, "f-sd6", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
458 1.1 christos { EPIPHANY_F_SN6, "f-sn6", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
459 1.1 christos { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
460 1.1 christos };
461 1.1 christos
462 1.1 christos #undef A
463 1.1 christos
464 1.1 christos
465 1.1 christos
466 1.1 christos /* multi ifield declarations */
467 1.1 christos
468 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_DISP11_MULTI_IFIELD [];
469 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SDISP11_MULTI_IFIELD [];
470 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_IMM16_MULTI_IFIELD [];
471 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RD6_MULTI_IFIELD [];
472 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RN6_MULTI_IFIELD [];
473 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RM6_MULTI_IFIELD [];
474 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SD6_MULTI_IFIELD [];
475 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SN6_MULTI_IFIELD [];
476 1.1 christos
477 1.1 christos
478 1.1 christos /* multi ifield definitions */
479 1.1 christos
480 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_DISP11_MULTI_IFIELD [] =
481 1.1 christos {
482 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_DISP3] } },
483 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_DISP8] } },
484 1.1 christos { 0, { (const PTR) 0 } }
485 1.1 christos };
486 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SDISP11_MULTI_IFIELD [] =
487 1.1 christos {
488 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_DISP3] } },
489 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_DISP8] } },
490 1.1 christos { 0, { (const PTR) 0 } }
491 1.1 christos };
492 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_IMM16_MULTI_IFIELD [] =
493 1.1 christos {
494 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_IMM8] } },
495 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_IMM_27_8] } },
496 1.1 christos { 0, { (const PTR) 0 } }
497 1.1 christos };
498 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RD6_MULTI_IFIELD [] =
499 1.1 christos {
500 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RD_X] } },
501 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RD] } },
502 1.1 christos { 0, { (const PTR) 0 } }
503 1.1 christos };
504 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RN6_MULTI_IFIELD [] =
505 1.1 christos {
506 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RN_X] } },
507 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RN] } },
508 1.1 christos { 0, { (const PTR) 0 } }
509 1.1 christos };
510 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RM6_MULTI_IFIELD [] =
511 1.1 christos {
512 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RM_X] } },
513 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RM] } },
514 1.1 christos { 0, { (const PTR) 0 } }
515 1.1 christos };
516 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SD6_MULTI_IFIELD [] =
517 1.1 christos {
518 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SD_X] } },
519 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SD] } },
520 1.1 christos { 0, { (const PTR) 0 } }
521 1.1 christos };
522 1.1 christos const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SN6_MULTI_IFIELD [] =
523 1.1 christos {
524 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SN_X] } },
525 1.1 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SN] } },
526 1.1 christos { 0, { (const PTR) 0 } }
527 1.1 christos };
528 1.1 christos
529 1.1 christos /* The operand table. */
530 1.1 christos
531 1.1 christos #define A(a) (1 << CGEN_OPERAND_##a)
532 1.1 christos #define OPERAND(op) EPIPHANY_OPERAND_##op
533 1.1 christos
534 1.1 christos const CGEN_OPERAND epiphany_cgen_operand_table[] =
535 1.1 christos {
536 1.1 christos /* pc: program counter */
537 1.1 christos { "pc", EPIPHANY_OPERAND_PC, HW_H_PC, 0, 0,
538 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_NIL] } },
539 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
540 1.1 christos /* zbit: integer zero bit */
541 1.1 christos { "zbit", EPIPHANY_OPERAND_ZBIT, HW_H_ZBIT, 0, 0,
542 1.1.1.3 christos { 0, { (const PTR) 0 } },
543 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
544 1.1 christos /* nbit: integer neg bit */
545 1.1 christos { "nbit", EPIPHANY_OPERAND_NBIT, HW_H_NBIT, 0, 0,
546 1.1.1.3 christos { 0, { (const PTR) 0 } },
547 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
548 1.1 christos /* cbit: integer carry bit */
549 1.1 christos { "cbit", EPIPHANY_OPERAND_CBIT, HW_H_CBIT, 0, 0,
550 1.1.1.3 christos { 0, { (const PTR) 0 } },
551 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
552 1.1 christos /* vbit: integer overflow bit */
553 1.1 christos { "vbit", EPIPHANY_OPERAND_VBIT, HW_H_VBIT, 0, 0,
554 1.1.1.3 christos { 0, { (const PTR) 0 } },
555 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
556 1.1 christos /* bzbit: floating point zero bit */
557 1.1 christos { "bzbit", EPIPHANY_OPERAND_BZBIT, HW_H_BZBIT, 0, 0,
558 1.1.1.3 christos { 0, { (const PTR) 0 } },
559 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
560 1.1 christos /* bnbit: floating point neg bit */
561 1.1 christos { "bnbit", EPIPHANY_OPERAND_BNBIT, HW_H_BNBIT, 0, 0,
562 1.1.1.3 christos { 0, { (const PTR) 0 } },
563 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
564 1.1 christos /* bvbit: floating point ovfl bit */
565 1.1 christos { "bvbit", EPIPHANY_OPERAND_BVBIT, HW_H_BVBIT, 0, 0,
566 1.1.1.3 christos { 0, { (const PTR) 0 } },
567 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
568 1.1 christos /* bcbit: floating point carry bit */
569 1.1 christos { "bcbit", EPIPHANY_OPERAND_BCBIT, HW_H_BCBIT, 0, 0,
570 1.1.1.3 christos { 0, { (const PTR) 0 } },
571 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
572 1.1 christos /* bubit: floating point underfl bit */
573 1.1 christos { "bubit", EPIPHANY_OPERAND_BUBIT, HW_H_BUBIT, 0, 0,
574 1.1.1.3 christos { 0, { (const PTR) 0 } },
575 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
576 1.1 christos /* bibit: floating point invalid bit */
577 1.1 christos { "bibit", EPIPHANY_OPERAND_BIBIT, HW_H_BIBIT, 0, 0,
578 1.1.1.3 christos { 0, { (const PTR) 0 } },
579 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
580 1.1 christos /* vsbit: integer overflow sticky */
581 1.1 christos { "vsbit", EPIPHANY_OPERAND_VSBIT, HW_H_VSBIT, 0, 0,
582 1.1.1.3 christos { 0, { (const PTR) 0 } },
583 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
584 1.1 christos /* bvsbit: floating point overflow sticky */
585 1.1 christos { "bvsbit", EPIPHANY_OPERAND_BVSBIT, HW_H_BVSBIT, 0, 0,
586 1.1.1.3 christos { 0, { (const PTR) 0 } },
587 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
588 1.1 christos /* bisbit: floating point invalid sticky */
589 1.1 christos { "bisbit", EPIPHANY_OPERAND_BISBIT, HW_H_BISBIT, 0, 0,
590 1.1.1.3 christos { 0, { (const PTR) 0 } },
591 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
592 1.1 christos /* busbit: floating point underflow sticky */
593 1.1 christos { "busbit", EPIPHANY_OPERAND_BUSBIT, HW_H_BUSBIT, 0, 0,
594 1.1.1.3 christos { 0, { (const PTR) 0 } },
595 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
596 1.1 christos /* expcause0bit: exceprion cause bit0 */
597 1.1 christos { "expcause0bit", EPIPHANY_OPERAND_EXPCAUSE0BIT, HW_H_EXPCAUSE0BIT, 0, 0,
598 1.1.1.3 christos { 0, { (const PTR) 0 } },
599 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
600 1.1 christos /* expcause1bit: exceprion cause bit1 */
601 1.1 christos { "expcause1bit", EPIPHANY_OPERAND_EXPCAUSE1BIT, HW_H_EXPCAUSE1BIT, 0, 0,
602 1.1.1.3 christos { 0, { (const PTR) 0 } },
603 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
604 1.1 christos /* expcause2bit: external load stalled bit */
605 1.1 christos { "expcause2bit", EPIPHANY_OPERAND_EXPCAUSE2BIT, HW_H_EXPCAUSE2BIT, 0, 0,
606 1.1.1.3 christos { 0, { (const PTR) 0 } },
607 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
608 1.1 christos /* extFstallbit: external fetch stalled bit */
609 1.1 christos { "extFstallbit", EPIPHANY_OPERAND_EXTFSTALLBIT, HW_H_EXTFSTALLBIT, 0, 0,
610 1.1.1.3 christos { 0, { (const PTR) 0 } },
611 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
612 1.1 christos /* trmbit: 0=round to nearest, 1=trunacte selct bit */
613 1.1 christos { "trmbit", EPIPHANY_OPERAND_TRMBIT, HW_H_TRMBIT, 0, 0,
614 1.1.1.3 christos { 0, { (const PTR) 0 } },
615 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
616 1.1 christos /* invExcEnbit: invalid exception enable bit */
617 1.1 christos { "invExcEnbit", EPIPHANY_OPERAND_INVEXCENBIT, HW_H_INVEXCENBIT, 0, 0,
618 1.1.1.3 christos { 0, { (const PTR) 0 } },
619 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
620 1.1 christos /* ovfExcEnbit: overflow exception enable bit */
621 1.1 christos { "ovfExcEnbit", EPIPHANY_OPERAND_OVFEXCENBIT, HW_H_OVFEXCENBIT, 0, 0,
622 1.1.1.3 christos { 0, { (const PTR) 0 } },
623 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
624 1.1 christos /* unExcEnbit: underflow exception enable bit */
625 1.1 christos { "unExcEnbit", EPIPHANY_OPERAND_UNEXCENBIT, HW_H_UNEXCENBIT, 0, 0,
626 1.1.1.3 christos { 0, { (const PTR) 0 } },
627 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
628 1.1 christos /* timer0bit0: timer 0 mode selection 0 */
629 1.1 christos { "timer0bit0", EPIPHANY_OPERAND_TIMER0BIT0, HW_H_TIMER0BIT0, 0, 0,
630 1.1.1.3 christos { 0, { (const PTR) 0 } },
631 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
632 1.1 christos /* timer0bit1: timer 0 mode selection 1 */
633 1.1 christos { "timer0bit1", EPIPHANY_OPERAND_TIMER0BIT1, HW_H_TIMER0BIT1, 0, 0,
634 1.1.1.3 christos { 0, { (const PTR) 0 } },
635 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
636 1.1 christos /* timer0bit2: timer 0 mode selection 2 */
637 1.1 christos { "timer0bit2", EPIPHANY_OPERAND_TIMER0BIT2, HW_H_TIMER0BIT2, 0, 0,
638 1.1.1.3 christos { 0, { (const PTR) 0 } },
639 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
640 1.1 christos /* timer0bit3: timer 0 mode selection 3 */
641 1.1 christos { "timer0bit3", EPIPHANY_OPERAND_TIMER0BIT3, HW_H_TIMER0BIT3, 0, 0,
642 1.1.1.3 christos { 0, { (const PTR) 0 } },
643 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
644 1.1 christos /* timer1bit0: timer 1 mode selection 0 */
645 1.1 christos { "timer1bit0", EPIPHANY_OPERAND_TIMER1BIT0, HW_H_TIMER1BIT0, 0, 0,
646 1.1.1.3 christos { 0, { (const PTR) 0 } },
647 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
648 1.1 christos /* timer1bit1: timer 1 mode selection 1 */
649 1.1 christos { "timer1bit1", EPIPHANY_OPERAND_TIMER1BIT1, HW_H_TIMER1BIT1, 0, 0,
650 1.1.1.3 christos { 0, { (const PTR) 0 } },
651 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
652 1.1 christos /* timer1bit2: timer 1 mode selection 2 */
653 1.1 christos { "timer1bit2", EPIPHANY_OPERAND_TIMER1BIT2, HW_H_TIMER1BIT2, 0, 0,
654 1.1.1.3 christos { 0, { (const PTR) 0 } },
655 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
656 1.1 christos /* timer1bit3: timer 1 mode selection 3 */
657 1.1 christos { "timer1bit3", EPIPHANY_OPERAND_TIMER1BIT3, HW_H_TIMER1BIT3, 0, 0,
658 1.1.1.3 christos { 0, { (const PTR) 0 } },
659 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
660 1.1 christos /* mbkptEnbit: multicore bkpt enable */
661 1.1 christos { "mbkptEnbit", EPIPHANY_OPERAND_MBKPTENBIT, HW_H_MBKPTENBIT, 0, 0,
662 1.1.1.3 christos { 0, { (const PTR) 0 } },
663 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
664 1.1 christos /* clockGateEnbit: clock gate enable enable */
665 1.1 christos { "clockGateEnbit", EPIPHANY_OPERAND_CLOCKGATEENBIT, HW_H_CLOCKGATEENBIT, 0, 0,
666 1.1.1.3 christos { 0, { (const PTR) 0 } },
667 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
668 1.1 christos /* arithmetic-modebit0: arithmetic mode bit0 */
669 1.1 christos { "arithmetic-modebit0", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT0, HW_H_ARITHMETIC_MODEBIT0, 0, 0,
670 1.1.1.3 christos { 0, { (const PTR) 0 } },
671 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
672 1.1 christos /* arithmetic-modebit1: arithmetic mode bit1 */
673 1.1 christos { "arithmetic-modebit1", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT1, HW_H_ARITHMETIC_MODEBIT1, 0, 0,
674 1.1.1.3 christos { 0, { (const PTR) 0 } },
675 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
676 1.1 christos /* arithmetic-modebit2: arithmetic mode bit2 */
677 1.1 christos { "arithmetic-modebit2", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT2, HW_H_ARITHMETIC_MODEBIT2, 0, 0,
678 1.1.1.3 christos { 0, { (const PTR) 0 } },
679 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
680 1.1 christos /* coreCfgResBit12: core config bit 12 */
681 1.1 christos { "coreCfgResBit12", EPIPHANY_OPERAND_CORECFGRESBIT12, HW_H_CORECFGRESBIT12, 0, 0,
682 1.1.1.3 christos { 0, { (const PTR) 0 } },
683 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
684 1.1 christos /* coreCfgResBit13: core config bit 13 */
685 1.1 christos { "coreCfgResBit13", EPIPHANY_OPERAND_CORECFGRESBIT13, HW_H_CORECFGRESBIT13, 0, 0,
686 1.1.1.3 christos { 0, { (const PTR) 0 } },
687 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
688 1.1 christos /* coreCfgResBit14: core config bit 14 */
689 1.1 christos { "coreCfgResBit14", EPIPHANY_OPERAND_CORECFGRESBIT14, HW_H_CORECFGRESBIT14, 0, 0,
690 1.1.1.3 christos { 0, { (const PTR) 0 } },
691 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
692 1.1 christos /* coreCfgResBit15: core config bit 15 */
693 1.1 christos { "coreCfgResBit15", EPIPHANY_OPERAND_CORECFGRESBIT15, HW_H_CORECFGRESBIT15, 0, 0,
694 1.1.1.3 christos { 0, { (const PTR) 0 } },
695 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
696 1.1 christos /* coreCfgResBit16: core config bit 16 */
697 1.1 christos { "coreCfgResBit16", EPIPHANY_OPERAND_CORECFGRESBIT16, HW_H_CORECFGRESBIT16, 0, 0,
698 1.1.1.3 christos { 0, { (const PTR) 0 } },
699 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
700 1.1 christos /* coreCfgResBit20: core config bit 20 */
701 1.1 christos { "coreCfgResBit20", EPIPHANY_OPERAND_CORECFGRESBIT20, HW_H_CORECFGRESBIT20, 0, 0,
702 1.1.1.3 christos { 0, { (const PTR) 0 } },
703 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
704 1.1 christos /* coreCfgResBit21: core config bit 21 */
705 1.1 christos { "coreCfgResBit21", EPIPHANY_OPERAND_CORECFGRESBIT21, HW_H_CORECFGRESBIT21, 0, 0,
706 1.1.1.3 christos { 0, { (const PTR) 0 } },
707 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
708 1.1 christos /* coreCfgResBit24: core config bit 24 */
709 1.1 christos { "coreCfgResBit24", EPIPHANY_OPERAND_CORECFGRESBIT24, HW_H_CORECFGRESBIT24, 0, 0,
710 1.1.1.3 christos { 0, { (const PTR) 0 } },
711 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
712 1.1 christos /* coreCfgResBit25: core config bit 25 */
713 1.1 christos { "coreCfgResBit25", EPIPHANY_OPERAND_CORECFGRESBIT25, HW_H_CORECFGRESBIT25, 0, 0,
714 1.1.1.3 christos { 0, { (const PTR) 0 } },
715 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
716 1.1 christos /* coreCfgResBit26: core config bit 26 */
717 1.1 christos { "coreCfgResBit26", EPIPHANY_OPERAND_CORECFGRESBIT26, HW_H_CORECFGRESBIT26, 0, 0,
718 1.1.1.3 christos { 0, { (const PTR) 0 } },
719 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
720 1.1 christos /* coreCfgResBit27: core config bit 27 */
721 1.1 christos { "coreCfgResBit27", EPIPHANY_OPERAND_CORECFGRESBIT27, HW_H_CORECFGRESBIT27, 0, 0,
722 1.1.1.3 christos { 0, { (const PTR) 0 } },
723 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
724 1.1 christos /* coreCfgResBit28: core config bit 28 */
725 1.1 christos { "coreCfgResBit28", EPIPHANY_OPERAND_CORECFGRESBIT28, HW_H_CORECFGRESBIT28, 0, 0,
726 1.1.1.3 christos { 0, { (const PTR) 0 } },
727 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
728 1.1 christos /* coreCfgResBit29: core config bit 29 */
729 1.1 christos { "coreCfgResBit29", EPIPHANY_OPERAND_CORECFGRESBIT29, HW_H_CORECFGRESBIT29, 0, 0,
730 1.1.1.3 christos { 0, { (const PTR) 0 } },
731 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
732 1.1 christos /* coreCfgResBit30: core config bit 30 */
733 1.1 christos { "coreCfgResBit30", EPIPHANY_OPERAND_CORECFGRESBIT30, HW_H_CORECFGRESBIT30, 0, 0,
734 1.1.1.3 christos { 0, { (const PTR) 0 } },
735 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
736 1.1 christos /* coreCfgResBit31: core config bit 31 */
737 1.1 christos { "coreCfgResBit31", EPIPHANY_OPERAND_CORECFGRESBIT31, HW_H_CORECFGRESBIT31, 0, 0,
738 1.1.1.3 christos { 0, { (const PTR) 0 } },
739 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
740 1.1 christos /* gidisablebit: global interrupt disable bit */
741 1.1 christos { "gidisablebit", EPIPHANY_OPERAND_GIDISABLEBIT, HW_H_GIDISABLEBIT, 0, 0,
742 1.1.1.3 christos { 0, { (const PTR) 0 } },
743 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
744 1.1 christos /* kmbit: kernel mode bit */
745 1.1 christos { "kmbit", EPIPHANY_OPERAND_KMBIT, HW_H_KMBIT, 0, 0,
746 1.1.1.3 christos { 0, { (const PTR) 0 } },
747 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
748 1.1 christos /* caibit: core actibe indicator bit */
749 1.1 christos { "caibit", EPIPHANY_OPERAND_CAIBIT, HW_H_CAIBIT, 0, 0,
750 1.1.1.3 christos { 0, { (const PTR) 0 } },
751 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
752 1.1 christos /* sflagbit: sflag bit */
753 1.1 christos { "sflagbit", EPIPHANY_OPERAND_SFLAGBIT, HW_H_SFLAGBIT, 0, 0,
754 1.1.1.3 christos { 0, { (const PTR) 0 } },
755 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
756 1.1 christos /* memaddr: memory effective address */
757 1.1 christos { "memaddr", EPIPHANY_OPERAND_MEMADDR, HW_H_MEMADDR, 0, 0,
758 1.1.1.3 christos { 0, { (const PTR) 0 } },
759 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
760 1.1 christos /* simm24: branch address pc-relative */
761 1.1 christos { "simm24", EPIPHANY_OPERAND_SIMM24, HW_H_IADDR, 31, 24,
762 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SIMM24] } },
763 1.1 christos { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
764 1.1 christos /* simm8: branch address pc-relative */
765 1.1 christos { "simm8", EPIPHANY_OPERAND_SIMM8, HW_H_IADDR, 15, 8,
766 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SIMM8] } },
767 1.1 christos { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
768 1.1 christos /* rd: destination register */
769 1.1 christos { "rd", EPIPHANY_OPERAND_RD, HW_H_REGISTERS, 15, 3,
770 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RD] } },
771 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
772 1.1 christos /* rn: source register */
773 1.1 christos { "rn", EPIPHANY_OPERAND_RN, HW_H_REGISTERS, 12, 3,
774 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RN] } },
775 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
776 1.1 christos /* rm: source register */
777 1.1 christos { "rm", EPIPHANY_OPERAND_RM, HW_H_REGISTERS, 9, 3,
778 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RM] } },
779 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
780 1.1 christos /* frd: fp destination register */
781 1.1 christos { "frd", EPIPHANY_OPERAND_FRD, HW_H_FPREGISTERS, 15, 3,
782 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RD] } },
783 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
784 1.1 christos /* frn: fp source register */
785 1.1 christos { "frn", EPIPHANY_OPERAND_FRN, HW_H_FPREGISTERS, 12, 3,
786 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RN] } },
787 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
788 1.1 christos /* frm: fp source register */
789 1.1 christos { "frm", EPIPHANY_OPERAND_FRM, HW_H_FPREGISTERS, 9, 3,
790 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_RM] } },
791 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
792 1.1 christos /* rd6: destination register */
793 1.1 christos { "rd6", EPIPHANY_OPERAND_RD6, HW_H_REGISTERS, 15, 6,
794 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RD6_MULTI_IFIELD[0] } },
795 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
796 1.1 christos /* rn6: source register */
797 1.1 christos { "rn6", EPIPHANY_OPERAND_RN6, HW_H_REGISTERS, 12, 6,
798 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RN6_MULTI_IFIELD[0] } },
799 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
800 1.1 christos /* rm6: source register */
801 1.1 christos { "rm6", EPIPHANY_OPERAND_RM6, HW_H_REGISTERS, 9, 6,
802 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RM6_MULTI_IFIELD[0] } },
803 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
804 1.1 christos /* frd6: fp destination register */
805 1.1 christos { "frd6", EPIPHANY_OPERAND_FRD6, HW_H_FPREGISTERS, 15, 6,
806 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RD6_MULTI_IFIELD[0] } },
807 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
808 1.1 christos /* frn6: fp source register */
809 1.1 christos { "frn6", EPIPHANY_OPERAND_FRN6, HW_H_FPREGISTERS, 12, 6,
810 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RN6_MULTI_IFIELD[0] } },
811 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
812 1.1 christos /* frm6: fp source register */
813 1.1 christos { "frm6", EPIPHANY_OPERAND_FRM6, HW_H_FPREGISTERS, 9, 6,
814 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_RM6_MULTI_IFIELD[0] } },
815 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
816 1.1 christos /* sd: special destination */
817 1.1 christos { "sd", EPIPHANY_OPERAND_SD, HW_H_CORE_REGISTERS, 15, 3,
818 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SD] } },
819 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
820 1.1 christos /* sn: special source */
821 1.1 christos { "sn", EPIPHANY_OPERAND_SN, HW_H_CORE_REGISTERS, 12, 3,
822 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SN] } },
823 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
824 1.1 christos /* sd6: special destination register */
825 1.1 christos { "sd6", EPIPHANY_OPERAND_SD6, HW_H_CORE_REGISTERS, 15, 6,
826 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SD6_MULTI_IFIELD[0] } },
827 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
828 1.1 christos /* sn6: special source register */
829 1.1 christos { "sn6", EPIPHANY_OPERAND_SN6, HW_H_CORE_REGISTERS, 12, 6,
830 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SN6_MULTI_IFIELD[0] } },
831 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
832 1.1 christos /* sddma: dma register */
833 1.1 christos { "sddma", EPIPHANY_OPERAND_SDDMA, HW_H_COREDMA_REGISTERS, 15, 6,
834 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SD6_MULTI_IFIELD[0] } },
835 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
836 1.1 christos /* sndma: dma register */
837 1.1 christos { "sndma", EPIPHANY_OPERAND_SNDMA, HW_H_COREDMA_REGISTERS, 12, 6,
838 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SN6_MULTI_IFIELD[0] } },
839 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
840 1.1 christos /* sdmem: mem register */
841 1.1 christos { "sdmem", EPIPHANY_OPERAND_SDMEM, HW_H_COREMEM_REGISTERS, 15, 6,
842 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SD6_MULTI_IFIELD[0] } },
843 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
844 1.1 christos /* snmem: mem register */
845 1.1 christos { "snmem", EPIPHANY_OPERAND_SNMEM, HW_H_COREMEM_REGISTERS, 12, 6,
846 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SN6_MULTI_IFIELD[0] } },
847 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
848 1.1 christos /* sdmesh: mesh register */
849 1.1 christos { "sdmesh", EPIPHANY_OPERAND_SDMESH, HW_H_COREMESH_REGISTERS, 15, 6,
850 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SD6_MULTI_IFIELD[0] } },
851 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
852 1.1 christos /* snmesh: mesh register */
853 1.1 christos { "snmesh", EPIPHANY_OPERAND_SNMESH, HW_H_COREMESH_REGISTERS, 12, 6,
854 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SN6_MULTI_IFIELD[0] } },
855 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
856 1.1 christos /* simm3: signed 3-bit literal */
857 1.1 christos { "simm3", EPIPHANY_OPERAND_SIMM3, HW_H_SINT, 9, 3,
858 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SDISP3] } },
859 1.1 christos { 0|A(RELAX), { { { (1<<MACH_BASE), 0 } } } } },
860 1.1 christos /* simm11: signed 11-bit literal */
861 1.1 christos { "simm11", EPIPHANY_OPERAND_SIMM11, HW_H_SINT, 9, 11,
862 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_SDISP11_MULTI_IFIELD[0] } },
863 1.1 christos { 0|A(RELAX)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
864 1.1 christos /* disp3: short data displacement */
865 1.1 christos { "disp3", EPIPHANY_OPERAND_DISP3, HW_H_UINT, 9, 3,
866 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_DISP3] } },
867 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
868 1.1 christos /* trapnum6: parameter for swi or trap */
869 1.1 christos { "trapnum6", EPIPHANY_OPERAND_TRAPNUM6, HW_H_UINT, 15, 6,
870 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_TRAP_NUM] } },
871 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
872 1.1 christos /* swi_num: unsigned 6-bit swi# */
873 1.1 christos { "swi_num", EPIPHANY_OPERAND_SWI_NUM, HW_H_UINT, 15, 6,
874 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_TRAP_NUM] } },
875 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
876 1.1 christos /* disp11: sign-magnitude data displacement */
877 1.1 christos { "disp11", EPIPHANY_OPERAND_DISP11, HW_H_UINT, 9, 11,
878 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_DISP11_MULTI_IFIELD[0] } },
879 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
880 1.1 christos /* shift: immediate shift amount */
881 1.1 christos { "shift", EPIPHANY_OPERAND_SHIFT, HW_H_UINT, 9, 5,
882 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SHIFT] } },
883 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
884 1.1 christos /* imm16: 16-bit unsigned literal */
885 1.1 christos { "imm16", EPIPHANY_OPERAND_IMM16, HW_H_ADDR, 12, 16,
886 1.1.1.3 christos { 2, { (const PTR) &EPIPHANY_F_IMM16_MULTI_IFIELD[0] } },
887 1.1 christos { 0|A(RELAX)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
888 1.1 christos /* imm8: 8-bit unsigned literal */
889 1.1 christos { "imm8", EPIPHANY_OPERAND_IMM8, HW_H_ADDR, 12, 8,
890 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_IMM8] } },
891 1.1 christos { 0|A(RELAX), { { { (1<<MACH_BASE), 0 } } } } },
892 1.1 christos /* direction: +/- indexing */
893 1.1 christos { "direction", EPIPHANY_OPERAND_DIRECTION, HW_H_UINT, 20, 1,
894 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_ADDSUBX] } },
895 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
896 1.1 christos /* dpmi: +/- magnitude immediate displacement */
897 1.1 christos { "dpmi", EPIPHANY_OPERAND_DPMI, HW_H_UINT, 24, 1,
898 1.1.1.3 christos { 0, { (const PTR) &epiphany_cgen_ifld_table[EPIPHANY_F_SUBD] } },
899 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
900 1.1 christos /* sentinel */
901 1.1 christos { 0, 0, 0, 0, 0,
902 1.1 christos { 0, { (const PTR) 0 } },
903 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }
904 1.1 christos };
905 1.1 christos
906 1.1 christos #undef A
907 1.1 christos
908 1.1 christos
909 1.1 christos /* The instruction table. */
910 1.1 christos
911 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
912 1.1 christos #define A(a) (1 << CGEN_INSN_##a)
913 1.1 christos
914 1.1 christos static const CGEN_IBASE epiphany_cgen_insn_table[MAX_INSNS] =
915 1.1 christos {
916 1.1 christos /* Special null first entry.
917 1.1 christos A `num' value of zero is thus invalid.
918 1.1 christos Also, the special `invalid' insn resides here. */
919 1.1 christos { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
920 1.1 christos /* beq.s $simm8 */
921 1.1 christos {
922 1.1 christos EPIPHANY_INSN_BEQ16, "beq16", "beq.s", 16,
923 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
924 1.1 christos },
925 1.1 christos /* beq.l $simm24 */
926 1.1 christos {
927 1.1 christos EPIPHANY_INSN_BEQ, "beq", "beq.l", 32,
928 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
929 1.1 christos },
930 1.1 christos /* bne.s $simm8 */
931 1.1 christos {
932 1.1 christos EPIPHANY_INSN_BNE16, "bne16", "bne.s", 16,
933 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
934 1.1 christos },
935 1.1 christos /* bne.l $simm24 */
936 1.1 christos {
937 1.1 christos EPIPHANY_INSN_BNE, "bne", "bne.l", 32,
938 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
939 1.1 christos },
940 1.1 christos /* bgtu.s $simm8 */
941 1.1 christos {
942 1.1 christos EPIPHANY_INSN_BGTU16, "bgtu16", "bgtu.s", 16,
943 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
944 1.1 christos },
945 1.1 christos /* bgtu.l $simm24 */
946 1.1 christos {
947 1.1 christos EPIPHANY_INSN_BGTU, "bgtu", "bgtu.l", 32,
948 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
949 1.1 christos },
950 1.1 christos /* bgteu.s $simm8 */
951 1.1 christos {
952 1.1 christos EPIPHANY_INSN_BGTEU16, "bgteu16", "bgteu.s", 16,
953 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
954 1.1 christos },
955 1.1 christos /* bgteu.l $simm24 */
956 1.1 christos {
957 1.1 christos EPIPHANY_INSN_BGTEU, "bgteu", "bgteu.l", 32,
958 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
959 1.1 christos },
960 1.1 christos /* blteu.s $simm8 */
961 1.1 christos {
962 1.1 christos EPIPHANY_INSN_BLTEU16, "blteu16", "blteu.s", 16,
963 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
964 1.1 christos },
965 1.1 christos /* blteu.l $simm24 */
966 1.1 christos {
967 1.1 christos EPIPHANY_INSN_BLTEU, "blteu", "blteu.l", 32,
968 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
969 1.1 christos },
970 1.1 christos /* bltu.s $simm8 */
971 1.1 christos {
972 1.1 christos EPIPHANY_INSN_BLTU16, "bltu16", "bltu.s", 16,
973 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
974 1.1 christos },
975 1.1 christos /* bltu.l $simm24 */
976 1.1 christos {
977 1.1 christos EPIPHANY_INSN_BLTU, "bltu", "bltu.l", 32,
978 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
979 1.1 christos },
980 1.1 christos /* bgt.s $simm8 */
981 1.1 christos {
982 1.1 christos EPIPHANY_INSN_BGT16, "bgt16", "bgt.s", 16,
983 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
984 1.1 christos },
985 1.1 christos /* bgt.l $simm24 */
986 1.1 christos {
987 1.1 christos EPIPHANY_INSN_BGT, "bgt", "bgt.l", 32,
988 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
989 1.1 christos },
990 1.1 christos /* bgte.s $simm8 */
991 1.1 christos {
992 1.1 christos EPIPHANY_INSN_BGTE16, "bgte16", "bgte.s", 16,
993 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
994 1.1 christos },
995 1.1 christos /* bgte.l $simm24 */
996 1.1 christos {
997 1.1 christos EPIPHANY_INSN_BGTE, "bgte", "bgte.l", 32,
998 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
999 1.1 christos },
1000 1.1 christos /* blt.s $simm8 */
1001 1.1 christos {
1002 1.1 christos EPIPHANY_INSN_BLT16, "blt16", "blt.s", 16,
1003 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1004 1.1 christos },
1005 1.1 christos /* blt.l $simm24 */
1006 1.1 christos {
1007 1.1 christos EPIPHANY_INSN_BLT, "blt", "blt.l", 32,
1008 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1009 1.1 christos },
1010 1.1 christos /* blte.s $simm8 */
1011 1.1 christos {
1012 1.1 christos EPIPHANY_INSN_BLTE16, "blte16", "blte.s", 16,
1013 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1014 1.1 christos },
1015 1.1 christos /* blte.l $simm24 */
1016 1.1 christos {
1017 1.1 christos EPIPHANY_INSN_BLTE, "blte", "blte.l", 32,
1018 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1019 1.1 christos },
1020 1.1 christos /* bbeq.s $simm8 */
1021 1.1 christos {
1022 1.1 christos EPIPHANY_INSN_BBEQ16, "bbeq16", "bbeq.s", 16,
1023 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1024 1.1 christos },
1025 1.1 christos /* bbeq.l $simm24 */
1026 1.1 christos {
1027 1.1 christos EPIPHANY_INSN_BBEQ, "bbeq", "bbeq.l", 32,
1028 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1029 1.1 christos },
1030 1.1 christos /* bbne.s $simm8 */
1031 1.1 christos {
1032 1.1 christos EPIPHANY_INSN_BBNE16, "bbne16", "bbne.s", 16,
1033 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1034 1.1 christos },
1035 1.1 christos /* bbne.l $simm24 */
1036 1.1 christos {
1037 1.1 christos EPIPHANY_INSN_BBNE, "bbne", "bbne.l", 32,
1038 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1039 1.1 christos },
1040 1.1 christos /* bblt.s $simm8 */
1041 1.1 christos {
1042 1.1 christos EPIPHANY_INSN_BBLT16, "bblt16", "bblt.s", 16,
1043 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1044 1.1 christos },
1045 1.1 christos /* bblt.l $simm24 */
1046 1.1 christos {
1047 1.1 christos EPIPHANY_INSN_BBLT, "bblt", "bblt.l", 32,
1048 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1049 1.1 christos },
1050 1.1 christos /* bblte.s $simm8 */
1051 1.1 christos {
1052 1.1 christos EPIPHANY_INSN_BBLTE16, "bblte16", "bblte.s", 16,
1053 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1054 1.1 christos },
1055 1.1 christos /* bblte.l $simm24 */
1056 1.1 christos {
1057 1.1 christos EPIPHANY_INSN_BBLTE, "bblte", "bblte.l", 32,
1058 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1059 1.1 christos },
1060 1.1 christos /* b.s $simm8 */
1061 1.1 christos {
1062 1.1 christos EPIPHANY_INSN_B16, "b16", "b.s", 16,
1063 1.1 christos { 0|A(SHORT_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1064 1.1 christos },
1065 1.1 christos /* b.l $simm24 */
1066 1.1 christos {
1067 1.1 christos EPIPHANY_INSN_B, "b", "b.l", 32,
1068 1.1 christos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1069 1.1 christos },
1070 1.1 christos /* bl.s $simm8 */
1071 1.1 christos {
1072 1.1 christos EPIPHANY_INSN_BL16, "bl16", "bl.s", 16,
1073 1.1 christos { 0|A(SHORT_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1074 1.1 christos },
1075 1.1 christos /* bl.l $simm24 */
1076 1.1 christos {
1077 1.1 christos EPIPHANY_INSN_BL, "bl", "bl.l", 32,
1078 1.1 christos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1079 1.1 christos },
1080 1.1 christos /* jr $rn */
1081 1.1 christos {
1082 1.1 christos EPIPHANY_INSN_JR16, "jr16", "jr", 16,
1083 1.1 christos { 0|A(SHORT_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1084 1.1 christos },
1085 1.1 christos /* rts */
1086 1.1 christos {
1087 1.1 christos -1, "rts", "rts", 32,
1088 1.1 christos { 0|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
1089 1.1 christos },
1090 1.1 christos /* jr $rn6 */
1091 1.1 christos {
1092 1.1 christos EPIPHANY_INSN_JR, "jr", "jr", 32,
1093 1.1 christos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1094 1.1 christos },
1095 1.1 christos /* jalr $rn */
1096 1.1 christos {
1097 1.1 christos EPIPHANY_INSN_JALR16, "jalr16", "jalr", 16,
1098 1.1 christos { 0|A(SHORT_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1099 1.1 christos },
1100 1.1 christos /* jalr $rn6 */
1101 1.1 christos {
1102 1.1 christos EPIPHANY_INSN_JALR, "jalr", "jalr", 32,
1103 1.1 christos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1104 1.1 christos },
1105 1.1 christos /* ldrb $rd,[$rn,$rm] */
1106 1.1 christos {
1107 1.1 christos EPIPHANY_INSN_LDRBX16_S, "ldrbx16.s", "ldrb", 16,
1108 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1109 1.1 christos },
1110 1.1 christos /* ldrb $rd,[$rn],$rm */
1111 1.1 christos {
1112 1.1 christos EPIPHANY_INSN_LDRBP16_S, "ldrbp16.s", "ldrb", 16,
1113 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1114 1.1 christos },
1115 1.1 christos /* ldrb $rd6,[$rn6,$direction$rm6] */
1116 1.1 christos {
1117 1.1 christos EPIPHANY_INSN_LDRBX_L, "ldrbx.l", "ldrb", 32,
1118 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1119 1.1 christos },
1120 1.1 christos /* ldrb $rd6,[$rn6],$direction$rm6 */
1121 1.1 christos {
1122 1.1 christos EPIPHANY_INSN_LDRBP_L, "ldrbp.l", "ldrb", 32,
1123 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1124 1.1 christos },
1125 1.1 christos /* ldrb $rd,[$rn,$disp3] */
1126 1.1 christos {
1127 1.1 christos EPIPHANY_INSN_LDRBD16_S, "ldrbd16.s", "ldrb", 16,
1128 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1129 1.1 christos },
1130 1.1 christos /* ldrb $rd6,[$rn6,$dpmi$disp11] */
1131 1.1 christos {
1132 1.1 christos EPIPHANY_INSN_LDRBD_L, "ldrbd.l", "ldrb", 32,
1133 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1134 1.1 christos },
1135 1.1 christos /* ldrb $rd6,[$rn6],$dpmi$disp11 */
1136 1.1 christos {
1137 1.1 christos EPIPHANY_INSN_LDRBDPM_L, "ldrbdpm.l", "ldrb", 32,
1138 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1139 1.1 christos },
1140 1.1 christos /* ldrh $rd,[$rn,$rm] */
1141 1.1 christos {
1142 1.1 christos EPIPHANY_INSN_LDRHX16_S, "ldrhx16.s", "ldrh", 16,
1143 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1144 1.1 christos },
1145 1.1 christos /* ldrh $rd,[$rn],$rm */
1146 1.1 christos {
1147 1.1 christos EPIPHANY_INSN_LDRHP16_S, "ldrhp16.s", "ldrh", 16,
1148 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1149 1.1 christos },
1150 1.1 christos /* ldrh $rd6,[$rn6,$direction$rm6] */
1151 1.1 christos {
1152 1.1 christos EPIPHANY_INSN_LDRHX_L, "ldrhx.l", "ldrh", 32,
1153 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1154 1.1 christos },
1155 1.1 christos /* ldrh $rd6,[$rn6],$direction$rm6 */
1156 1.1 christos {
1157 1.1 christos EPIPHANY_INSN_LDRHP_L, "ldrhp.l", "ldrh", 32,
1158 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1159 1.1 christos },
1160 1.1 christos /* ldrh $rd,[$rn,$disp3] */
1161 1.1 christos {
1162 1.1 christos EPIPHANY_INSN_LDRHD16_S, "ldrhd16.s", "ldrh", 16,
1163 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1164 1.1 christos },
1165 1.1 christos /* ldrh $rd6,[$rn6,$dpmi$disp11] */
1166 1.1 christos {
1167 1.1 christos EPIPHANY_INSN_LDRHD_L, "ldrhd.l", "ldrh", 32,
1168 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1169 1.1 christos },
1170 1.1 christos /* ldrh $rd6,[$rn6],$dpmi$disp11 */
1171 1.1 christos {
1172 1.1 christos EPIPHANY_INSN_LDRHDPM_L, "ldrhdpm.l", "ldrh", 32,
1173 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1174 1.1 christos },
1175 1.1 christos /* ldr $rd,[$rn,$rm] */
1176 1.1 christos {
1177 1.1 christos EPIPHANY_INSN_LDRX16_S, "ldrx16.s", "ldr", 16,
1178 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1179 1.1 christos },
1180 1.1 christos /* ldr $rd,[$rn],$rm */
1181 1.1 christos {
1182 1.1 christos EPIPHANY_INSN_LDRP16_S, "ldrp16.s", "ldr", 16,
1183 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1184 1.1 christos },
1185 1.1 christos /* ldr $rd6,[$rn6,$direction$rm6] */
1186 1.1 christos {
1187 1.1 christos EPIPHANY_INSN_LDRX_L, "ldrx.l", "ldr", 32,
1188 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1189 1.1 christos },
1190 1.1 christos /* ldr $rd6,[$rn6],$direction$rm6 */
1191 1.1 christos {
1192 1.1 christos EPIPHANY_INSN_LDRP_L, "ldrp.l", "ldr", 32,
1193 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1194 1.1 christos },
1195 1.1 christos /* ldr $rd,[$rn,$disp3] */
1196 1.1 christos {
1197 1.1 christos EPIPHANY_INSN_LDRD16_S, "ldrd16.s", "ldr", 16,
1198 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1199 1.1 christos },
1200 1.1 christos /* ldr $rd6,[$rn6,$dpmi$disp11] */
1201 1.1 christos {
1202 1.1 christos EPIPHANY_INSN_LDRD_L, "ldrd.l", "ldr", 32,
1203 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1204 1.1 christos },
1205 1.1 christos /* ldr $rd6,[$rn6],$dpmi$disp11 */
1206 1.1 christos {
1207 1.1 christos EPIPHANY_INSN_LDRDPM_L, "ldrdpm.l", "ldr", 32,
1208 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1209 1.1 christos },
1210 1.1 christos /* ldrd $rd,[$rn,$rm] */
1211 1.1 christos {
1212 1.1 christos EPIPHANY_INSN_LDRDX16_S, "ldrdx16.s", "ldrd", 16,
1213 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1214 1.1 christos },
1215 1.1 christos /* ldrd $rd,[$rn],$rm */
1216 1.1 christos {
1217 1.1 christos EPIPHANY_INSN_LDRDP16_S, "ldrdp16.s", "ldrd", 16,
1218 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1219 1.1 christos },
1220 1.1 christos /* ldrd $rd6,[$rn6,$direction$rm6] */
1221 1.1 christos {
1222 1.1 christos EPIPHANY_INSN_LDRDX_L, "ldrdx.l", "ldrd", 32,
1223 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1224 1.1 christos },
1225 1.1 christos /* ldrd $rd6,[$rn6],$direction$rm6 */
1226 1.1 christos {
1227 1.1 christos EPIPHANY_INSN_LDRDP_L, "ldrdp.l", "ldrd", 32,
1228 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1229 1.1 christos },
1230 1.1 christos /* ldrd $rd,[$rn,$disp3] */
1231 1.1 christos {
1232 1.1 christos EPIPHANY_INSN_LDRDD16_S, "ldrdd16.s", "ldrd", 16,
1233 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1234 1.1 christos },
1235 1.1 christos /* ldrd $rd6,[$rn6,$dpmi$disp11] */
1236 1.1 christos {
1237 1.1 christos EPIPHANY_INSN_LDRDD_L, "ldrdd.l", "ldrd", 32,
1238 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1239 1.1 christos },
1240 1.1 christos /* ldrd $rd6,[$rn6],$dpmi$disp11 */
1241 1.1 christos {
1242 1.1 christos EPIPHANY_INSN_LDRDDPM_L, "ldrddpm.l", "ldrd", 32,
1243 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1244 1.1 christos },
1245 1.1 christos /* testsetb $rd6,[$rn6,$direction$rm6] */
1246 1.1 christos {
1247 1.1 christos EPIPHANY_INSN_TESTSETBT, "testsetbt", "testsetb", 32,
1248 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1249 1.1 christos },
1250 1.1 christos /* testseth $rd6,[$rn6,$direction$rm6] */
1251 1.1 christos {
1252 1.1 christos EPIPHANY_INSN_TESTSETHT, "testsetht", "testseth", 32,
1253 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1254 1.1 christos },
1255 1.1 christos /* testset $rd6,[$rn6,$direction$rm6] */
1256 1.1 christos {
1257 1.1 christos EPIPHANY_INSN_TESTSETT, "testsett", "testset", 32,
1258 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1259 1.1 christos },
1260 1.1 christos /* strb $rd,[$rn,$rm] */
1261 1.1 christos {
1262 1.1 christos EPIPHANY_INSN_STRBX16, "strbx16", "strb", 16,
1263 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1264 1.1 christos },
1265 1.1 christos /* strb $rd6,[$rn6,$direction$rm6] */
1266 1.1 christos {
1267 1.1 christos EPIPHANY_INSN_STRBX, "strbx", "strb", 32,
1268 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1269 1.1 christos },
1270 1.1 christos /* strb $rd,[$rn],$rm */
1271 1.1 christos {
1272 1.1 christos EPIPHANY_INSN_STRBP16, "strbp16", "strb", 16,
1273 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1274 1.1 christos },
1275 1.1 christos /* strb $rd6,[$rn6],$direction$rm6 */
1276 1.1 christos {
1277 1.1 christos EPIPHANY_INSN_STRBP, "strbp", "strb", 32,
1278 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1279 1.1 christos },
1280 1.1 christos /* strb $rd,[$rn,$disp3] */
1281 1.1 christos {
1282 1.1 christos EPIPHANY_INSN_STRBD16, "strbd16", "strb", 16,
1283 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1284 1.1 christos },
1285 1.1 christos /* strb $rd6,[$rn6,$dpmi$disp11] */
1286 1.1 christos {
1287 1.1 christos EPIPHANY_INSN_STRBD, "strbd", "strb", 32,
1288 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1289 1.1 christos },
1290 1.1 christos /* strb $rd6,[$rn6],$dpmi$disp11 */
1291 1.1 christos {
1292 1.1 christos EPIPHANY_INSN_STRBDPM, "strbdpm", "strb", 32,
1293 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1294 1.1 christos },
1295 1.1 christos /* strh $rd,[$rn,$rm] */
1296 1.1 christos {
1297 1.1 christos EPIPHANY_INSN_STRHX16, "strhx16", "strh", 16,
1298 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1299 1.1 christos },
1300 1.1 christos /* strh $rd6,[$rn6,$direction$rm6] */
1301 1.1 christos {
1302 1.1 christos EPIPHANY_INSN_STRHX, "strhx", "strh", 32,
1303 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1304 1.1 christos },
1305 1.1 christos /* strh $rd,[$rn],$rm */
1306 1.1 christos {
1307 1.1 christos EPIPHANY_INSN_STRHP16, "strhp16", "strh", 16,
1308 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1309 1.1 christos },
1310 1.1 christos /* strh $rd6,[$rn6],$direction$rm6 */
1311 1.1 christos {
1312 1.1 christos EPIPHANY_INSN_STRHP, "strhp", "strh", 32,
1313 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1314 1.1 christos },
1315 1.1 christos /* strh $rd,[$rn,$disp3] */
1316 1.1 christos {
1317 1.1 christos EPIPHANY_INSN_STRHD16, "strhd16", "strh", 16,
1318 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1319 1.1 christos },
1320 1.1 christos /* strh $rd6,[$rn6,$dpmi$disp11] */
1321 1.1 christos {
1322 1.1 christos EPIPHANY_INSN_STRHD, "strhd", "strh", 32,
1323 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1324 1.1 christos },
1325 1.1 christos /* strh $rd6,[$rn6],$dpmi$disp11 */
1326 1.1 christos {
1327 1.1 christos EPIPHANY_INSN_STRHDPM, "strhdpm", "strh", 32,
1328 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1329 1.1 christos },
1330 1.1 christos /* str $rd,[$rn,$rm] */
1331 1.1 christos {
1332 1.1 christos EPIPHANY_INSN_STRX16, "strx16", "str", 16,
1333 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1334 1.1 christos },
1335 1.1 christos /* str $rd6,[$rn6,$direction$rm6] */
1336 1.1 christos {
1337 1.1 christos EPIPHANY_INSN_STRX, "strx", "str", 32,
1338 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1339 1.1 christos },
1340 1.1 christos /* str $rd,[$rn],$rm */
1341 1.1 christos {
1342 1.1 christos EPIPHANY_INSN_STRP16, "strp16", "str", 16,
1343 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1344 1.1 christos },
1345 1.1 christos /* str $rd6,[$rn6],$direction$rm6 */
1346 1.1 christos {
1347 1.1 christos EPIPHANY_INSN_STRP, "strp", "str", 32,
1348 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1349 1.1 christos },
1350 1.1 christos /* str $rd,[$rn,$disp3] */
1351 1.1 christos {
1352 1.1 christos EPIPHANY_INSN_STRD16, "strd16", "str", 16,
1353 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1354 1.1 christos },
1355 1.1 christos /* str $rd6,[$rn6,$dpmi$disp11] */
1356 1.1 christos {
1357 1.1 christos EPIPHANY_INSN_STRD, "strd", "str", 32,
1358 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1359 1.1 christos },
1360 1.1 christos /* str $rd6,[$rn6],$dpmi$disp11 */
1361 1.1 christos {
1362 1.1 christos EPIPHANY_INSN_STRDPM, "strdpm", "str", 32,
1363 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1364 1.1 christos },
1365 1.1 christos /* strd $rd,[$rn,$rm] */
1366 1.1 christos {
1367 1.1 christos EPIPHANY_INSN_STRDX16, "strdx16", "strd", 16,
1368 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1369 1.1 christos },
1370 1.1 christos /* strd $rd6,[$rn6,$direction$rm6] */
1371 1.1 christos {
1372 1.1 christos EPIPHANY_INSN_STRDX, "strdx", "strd", 32,
1373 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1374 1.1 christos },
1375 1.1 christos /* strd $rd,[$rn],$rm */
1376 1.1 christos {
1377 1.1 christos EPIPHANY_INSN_STRDP16, "strdp16", "strd", 16,
1378 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1379 1.1 christos },
1380 1.1 christos /* strd $rd6,[$rn6],$direction$rm6 */
1381 1.1 christos {
1382 1.1 christos EPIPHANY_INSN_STRDP, "strdp", "strd", 32,
1383 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1384 1.1 christos },
1385 1.1 christos /* strd $rd,[$rn,$disp3] */
1386 1.1 christos {
1387 1.1 christos EPIPHANY_INSN_STRDD16, "strdd16", "strd", 16,
1388 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1389 1.1 christos },
1390 1.1 christos /* strd $rd6,[$rn6,$dpmi$disp11] */
1391 1.1 christos {
1392 1.1 christos EPIPHANY_INSN_STRDD, "strdd", "strd", 32,
1393 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1394 1.1 christos },
1395 1.1 christos /* strd $rd6,[$rn6],$dpmi$disp11 */
1396 1.1 christos {
1397 1.1 christos EPIPHANY_INSN_STRDDPM, "strddpm", "strd", 32,
1398 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1399 1.1 christos },
1400 1.1 christos /* moveq $rd,$rn */
1401 1.1 christos {
1402 1.1 christos EPIPHANY_INSN_CMOV16EQ, "cmov16EQ", "moveq", 16,
1403 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1404 1.1 christos },
1405 1.1 christos /* moveq $rd6,$rn6 */
1406 1.1 christos {
1407 1.1 christos EPIPHANY_INSN_CMOVEQ, "cmovEQ", "moveq", 32,
1408 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1409 1.1 christos },
1410 1.1 christos /* movne $rd,$rn */
1411 1.1 christos {
1412 1.1 christos EPIPHANY_INSN_CMOV16NE, "cmov16NE", "movne", 16,
1413 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1414 1.1 christos },
1415 1.1 christos /* movne $rd6,$rn6 */
1416 1.1 christos {
1417 1.1 christos EPIPHANY_INSN_CMOVNE, "cmovNE", "movne", 32,
1418 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1419 1.1 christos },
1420 1.1 christos /* movgtu $rd,$rn */
1421 1.1 christos {
1422 1.1 christos EPIPHANY_INSN_CMOV16GTU, "cmov16GTU", "movgtu", 16,
1423 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1424 1.1 christos },
1425 1.1 christos /* movgtu $rd6,$rn6 */
1426 1.1 christos {
1427 1.1 christos EPIPHANY_INSN_CMOVGTU, "cmovGTU", "movgtu", 32,
1428 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1429 1.1 christos },
1430 1.1 christos /* movgteu $rd,$rn */
1431 1.1 christos {
1432 1.1 christos EPIPHANY_INSN_CMOV16GTEU, "cmov16GTEU", "movgteu", 16,
1433 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1434 1.1 christos },
1435 1.1 christos /* movgteu $rd6,$rn6 */
1436 1.1 christos {
1437 1.1 christos EPIPHANY_INSN_CMOVGTEU, "cmovGTEU", "movgteu", 32,
1438 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1439 1.1 christos },
1440 1.1 christos /* movlteu $rd,$rn */
1441 1.1 christos {
1442 1.1 christos EPIPHANY_INSN_CMOV16LTEU, "cmov16LTEU", "movlteu", 16,
1443 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1444 1.1 christos },
1445 1.1 christos /* movlteu $rd6,$rn6 */
1446 1.1 christos {
1447 1.1 christos EPIPHANY_INSN_CMOVLTEU, "cmovLTEU", "movlteu", 32,
1448 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1449 1.1 christos },
1450 1.1 christos /* movltu $rd,$rn */
1451 1.1 christos {
1452 1.1 christos EPIPHANY_INSN_CMOV16LTU, "cmov16LTU", "movltu", 16,
1453 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1454 1.1 christos },
1455 1.1 christos /* movltu $rd6,$rn6 */
1456 1.1 christos {
1457 1.1 christos EPIPHANY_INSN_CMOVLTU, "cmovLTU", "movltu", 32,
1458 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1459 1.1 christos },
1460 1.1 christos /* movgt $rd,$rn */
1461 1.1 christos {
1462 1.1 christos EPIPHANY_INSN_CMOV16GT, "cmov16GT", "movgt", 16,
1463 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1464 1.1 christos },
1465 1.1 christos /* movgt $rd6,$rn6 */
1466 1.1 christos {
1467 1.1 christos EPIPHANY_INSN_CMOVGT, "cmovGT", "movgt", 32,
1468 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1469 1.1 christos },
1470 1.1 christos /* movgte $rd,$rn */
1471 1.1 christos {
1472 1.1 christos EPIPHANY_INSN_CMOV16GTE, "cmov16GTE", "movgte", 16,
1473 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1474 1.1 christos },
1475 1.1 christos /* movgte $rd6,$rn6 */
1476 1.1 christos {
1477 1.1 christos EPIPHANY_INSN_CMOVGTE, "cmovGTE", "movgte", 32,
1478 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1479 1.1 christos },
1480 1.1 christos /* movlt $rd,$rn */
1481 1.1 christos {
1482 1.1 christos EPIPHANY_INSN_CMOV16LT, "cmov16LT", "movlt", 16,
1483 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1484 1.1 christos },
1485 1.1 christos /* movlt $rd6,$rn6 */
1486 1.1 christos {
1487 1.1 christos EPIPHANY_INSN_CMOVLT, "cmovLT", "movlt", 32,
1488 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1489 1.1 christos },
1490 1.1 christos /* movlte $rd,$rn */
1491 1.1 christos {
1492 1.1 christos EPIPHANY_INSN_CMOV16LTE, "cmov16LTE", "movlte", 16,
1493 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1494 1.1 christos },
1495 1.1 christos /* movlte $rd6,$rn6 */
1496 1.1 christos {
1497 1.1 christos EPIPHANY_INSN_CMOVLTE, "cmovLTE", "movlte", 32,
1498 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1499 1.1 christos },
1500 1.1 christos /* mov $rd,$rn */
1501 1.1 christos {
1502 1.1 christos EPIPHANY_INSN_CMOV16B, "cmov16B", "mov", 16,
1503 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1504 1.1 christos },
1505 1.1 christos /* mov $rd6,$rn6 */
1506 1.1 christos {
1507 1.1 christos EPIPHANY_INSN_CMOVB, "cmovB", "mov", 32,
1508 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1509 1.1 christos },
1510 1.1 christos /* movbeq $rd,$rn */
1511 1.1 christos {
1512 1.1 christos EPIPHANY_INSN_CMOV16BEQ, "cmov16BEQ", "movbeq", 16,
1513 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1514 1.1 christos },
1515 1.1 christos /* movbeq $rd6,$rn6 */
1516 1.1 christos {
1517 1.1 christos EPIPHANY_INSN_CMOVBEQ, "cmovBEQ", "movbeq", 32,
1518 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1519 1.1 christos },
1520 1.1 christos /* movbne $rd,$rn */
1521 1.1 christos {
1522 1.1 christos EPIPHANY_INSN_CMOV16BNE, "cmov16BNE", "movbne", 16,
1523 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1524 1.1 christos },
1525 1.1 christos /* movbne $rd6,$rn6 */
1526 1.1 christos {
1527 1.1 christos EPIPHANY_INSN_CMOVBNE, "cmovBNE", "movbne", 32,
1528 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1529 1.1 christos },
1530 1.1 christos /* movblt $rd,$rn */
1531 1.1 christos {
1532 1.1 christos EPIPHANY_INSN_CMOV16BLT, "cmov16BLT", "movblt", 16,
1533 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1534 1.1 christos },
1535 1.1 christos /* movblt $rd6,$rn6 */
1536 1.1 christos {
1537 1.1 christos EPIPHANY_INSN_CMOVBLT, "cmovBLT", "movblt", 32,
1538 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1539 1.1 christos },
1540 1.1 christos /* movblte $rd,$rn */
1541 1.1 christos {
1542 1.1 christos EPIPHANY_INSN_CMOV16BLTE, "cmov16BLTE", "movblte", 16,
1543 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1544 1.1 christos },
1545 1.1 christos /* movblte $rd6,$rn6 */
1546 1.1 christos {
1547 1.1 christos EPIPHANY_INSN_CMOVBLTE, "cmovBLTE", "movblte", 32,
1548 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1549 1.1 christos },
1550 1.1 christos /* movts $sn,$rd */
1551 1.1 christos {
1552 1.1 christos EPIPHANY_INSN_MOVTS16, "movts16", "movts", 16,
1553 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1554 1.1 christos },
1555 1.1 christos /* movts $sn6,$rd6 */
1556 1.1 christos {
1557 1.1 christos EPIPHANY_INSN_MOVTS6, "movts6", "movts", 32,
1558 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1559 1.1 christos },
1560 1.1 christos /* movts $sndma,$rd6 */
1561 1.1 christos {
1562 1.1 christos EPIPHANY_INSN_MOVTSDMA, "movtsdma", "movts", 32,
1563 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1564 1.1 christos },
1565 1.1 christos /* movts $snmem,$rd6 */
1566 1.1 christos {
1567 1.1 christos EPIPHANY_INSN_MOVTSMEM, "movtsmem", "movts", 32,
1568 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1569 1.1 christos },
1570 1.1 christos /* movts $snmesh,$rd6 */
1571 1.1 christos {
1572 1.1 christos EPIPHANY_INSN_MOVTSMESH, "movtsmesh", "movts", 32,
1573 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1574 1.1 christos },
1575 1.1 christos /* movfs $rd,$sn */
1576 1.1 christos {
1577 1.1 christos EPIPHANY_INSN_MOVFS16, "movfs16", "movfs", 16,
1578 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1579 1.1 christos },
1580 1.1 christos /* movfs $rd6,$sn6 */
1581 1.1 christos {
1582 1.1 christos EPIPHANY_INSN_MOVFS6, "movfs6", "movfs", 32,
1583 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1584 1.1 christos },
1585 1.1 christos /* movfs $rd6,$sndma */
1586 1.1 christos {
1587 1.1 christos EPIPHANY_INSN_MOVFSDMA, "movfsdma", "movfs", 32,
1588 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1589 1.1 christos },
1590 1.1 christos /* movfs $rd6,$snmem */
1591 1.1 christos {
1592 1.1 christos EPIPHANY_INSN_MOVFSMEM, "movfsmem", "movfs", 32,
1593 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1594 1.1 christos },
1595 1.1 christos /* movfs $rd6,$snmesh */
1596 1.1 christos {
1597 1.1 christos EPIPHANY_INSN_MOVFSMESH, "movfsmesh", "movfs", 32,
1598 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1599 1.1 christos },
1600 1.1 christos /* nop */
1601 1.1 christos {
1602 1.1 christos EPIPHANY_INSN_NOP, "nop", "nop", 16,
1603 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1604 1.1 christos },
1605 1.1 christos /* snop */
1606 1.1 christos {
1607 1.1 christos EPIPHANY_INSN_SNOP, "snop", "snop", 16,
1608 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1609 1.1 christos },
1610 1.1 christos /* unimpl */
1611 1.1 christos {
1612 1.1 christos EPIPHANY_INSN_UNIMPL, "unimpl", "unimpl", 32,
1613 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1614 1.1 christos },
1615 1.1 christos /* idle */
1616 1.1 christos {
1617 1.1 christos EPIPHANY_INSN_IDLE, "idle", "idle", 16,
1618 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } }
1619 1.1 christos },
1620 1.1 christos /* bkpt */
1621 1.1 christos {
1622 1.1 christos EPIPHANY_INSN_BKPT, "bkpt", "bkpt", 16,
1623 1.1 christos { 0|A(SHORT_INSN)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1624 1.1 christos },
1625 1.1 christos /* mbkpt */
1626 1.1 christos {
1627 1.1 christos EPIPHANY_INSN_MBKPT, "mbkpt", "mbkpt", 16,
1628 1.1 christos { 0|A(SHORT_INSN), { { { (1<<MACH_BASE), 0 } } } }
1629 1.1 christos },
1630 1.1 christos /* rti */
1631 1.1 christos {
1632 1.1 christos EPIPHANY_INSN_RTI, "rti", "rti", 16,
1633 1.1 christos { 0|A(UNCOND_CTI)|A(SHORT_INSN), { { { (1<<MACH_BASE), 0 } } } }
1634 1.1 christos },
1635 1.1 christos /* wand */
1636 1.1 christos {
1637 1.1 christos EPIPHANY_INSN_WAND, "wand", "wand", 16,
1638 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1639 1.1 christos },
1640 1.1 christos /* sync */
1641 1.1 christos {
1642 1.1 christos EPIPHANY_INSN_SYNC, "sync", "sync", 16,
1643 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1644 1.1 christos },
1645 1.1 christos /* gie */
1646 1.1 christos {
1647 1.1 christos EPIPHANY_INSN_GIEN, "gien", "gie", 16,
1648 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1649 1.1 christos },
1650 1.1 christos /* gid */
1651 1.1 christos {
1652 1.1 christos EPIPHANY_INSN_GIDIS, "gidis", "gid", 16,
1653 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1654 1.1 christos },
1655 1.1 christos /* swi $swi_num */
1656 1.1 christos {
1657 1.1 christos EPIPHANY_INSN_SWI_NUM, "swi_num", "swi", 16,
1658 1.1 christos { 0|A(UNCOND_CTI)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1659 1.1 christos },
1660 1.1 christos /* swi */
1661 1.1 christos {
1662 1.1 christos -1, "swi", "swi", 16,
1663 1.1 christos { 0|A(UNCOND_CTI)|A(SHORT_INSN)|A(ALIAS)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1664 1.1 christos },
1665 1.1 christos /* trap $trapnum6 */
1666 1.1 christos {
1667 1.1 christos EPIPHANY_INSN_TRAP16, "trap16", "trap", 16,
1668 1.1 christos { 0|A(UNCOND_CTI)|A(SHORT_INSN), { { { (1<<MACH_BASE), 0 } } } }
1669 1.1 christos },
1670 1.1 christos /* add $rd,$rn,$rm */
1671 1.1 christos {
1672 1.1 christos EPIPHANY_INSN_ADD16, "add16", "add", 16,
1673 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1674 1.1 christos },
1675 1.1 christos /* add $rd6,$rn6,$rm6 */
1676 1.1 christos {
1677 1.1 christos EPIPHANY_INSN_ADD, "add", "add", 32,
1678 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1679 1.1 christos },
1680 1.1 christos /* sub $rd,$rn,$rm */
1681 1.1 christos {
1682 1.1 christos EPIPHANY_INSN_SUB16, "sub16", "sub", 16,
1683 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1684 1.1 christos },
1685 1.1 christos /* sub $rd6,$rn6,$rm6 */
1686 1.1 christos {
1687 1.1 christos EPIPHANY_INSN_SUB, "sub", "sub", 32,
1688 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1689 1.1 christos },
1690 1.1 christos /* and $rd,$rn,$rm */
1691 1.1 christos {
1692 1.1 christos EPIPHANY_INSN_AND16, "and16", "and", 16,
1693 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1694 1.1 christos },
1695 1.1 christos /* and $rd6,$rn6,$rm6 */
1696 1.1 christos {
1697 1.1 christos EPIPHANY_INSN_AND, "and", "and", 32,
1698 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1699 1.1 christos },
1700 1.1 christos /* orr $rd,$rn,$rm */
1701 1.1 christos {
1702 1.1 christos EPIPHANY_INSN_ORR16, "orr16", "orr", 16,
1703 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1704 1.1 christos },
1705 1.1 christos /* orr $rd6,$rn6,$rm6 */
1706 1.1 christos {
1707 1.1 christos EPIPHANY_INSN_ORR, "orr", "orr", 32,
1708 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1709 1.1 christos },
1710 1.1 christos /* eor $rd,$rn,$rm */
1711 1.1 christos {
1712 1.1 christos EPIPHANY_INSN_EOR16, "eor16", "eor", 16,
1713 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1714 1.1 christos },
1715 1.1 christos /* eor $rd6,$rn6,$rm6 */
1716 1.1 christos {
1717 1.1 christos EPIPHANY_INSN_EOR, "eor", "eor", 32,
1718 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1719 1.1 christos },
1720 1.1 christos /* add.s $rd,$rn,$simm3 */
1721 1.1 christos {
1722 1.1 christos EPIPHANY_INSN_ADDI16, "addi16", "add.s", 16,
1723 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1724 1.1 christos },
1725 1.1 christos /* add.l $rd6,$rn6,$simm11 */
1726 1.1 christos {
1727 1.1 christos EPIPHANY_INSN_ADDI, "addi", "add.l", 32,
1728 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1729 1.1 christos },
1730 1.1 christos /* sub.s $rd,$rn,$simm3 */
1731 1.1 christos {
1732 1.1 christos EPIPHANY_INSN_SUBI16, "subi16", "sub.s", 16,
1733 1.1 christos { 0|A(IMM3)|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1734 1.1 christos },
1735 1.1 christos /* sub.l $rd6,$rn6,$simm11 */
1736 1.1 christos {
1737 1.1 christos EPIPHANY_INSN_SUBI, "subi", "sub.l", 32,
1738 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1739 1.1 christos },
1740 1.1 christos /* asr $rd,$rn,$rm */
1741 1.1 christos {
1742 1.1 christos EPIPHANY_INSN_ASR16, "asr16", "asr", 16,
1743 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1744 1.1 christos },
1745 1.1 christos /* asr $rd6,$rn6,$rm6 */
1746 1.1 christos {
1747 1.1 christos EPIPHANY_INSN_ASR, "asr", "asr", 32,
1748 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1749 1.1 christos },
1750 1.1 christos /* lsr $rd,$rn,$rm */
1751 1.1 christos {
1752 1.1 christos EPIPHANY_INSN_LSR16, "lsr16", "lsr", 16,
1753 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1754 1.1 christos },
1755 1.1 christos /* lsr $rd6,$rn6,$rm6 */
1756 1.1 christos {
1757 1.1 christos EPIPHANY_INSN_LSR, "lsr", "lsr", 32,
1758 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1759 1.1 christos },
1760 1.1 christos /* lsl $rd,$rn,$rm */
1761 1.1 christos {
1762 1.1 christos EPIPHANY_INSN_LSL16, "lsl16", "lsl", 16,
1763 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1764 1.1 christos },
1765 1.1 christos /* lsl $rd6,$rn6,$rm6 */
1766 1.1 christos {
1767 1.1 christos EPIPHANY_INSN_LSL, "lsl", "lsl", 32,
1768 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1769 1.1 christos },
1770 1.1 christos /* lsr $rd,$rn,$shift */
1771 1.1 christos {
1772 1.1 christos EPIPHANY_INSN_LSRI16, "lsri16", "lsr", 16,
1773 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1774 1.1 christos },
1775 1.1 christos /* lsr $rd6,$rn6,$shift */
1776 1.1 christos {
1777 1.1 christos EPIPHANY_INSN_LSRI32, "lsri32", "lsr", 32,
1778 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1779 1.1 christos },
1780 1.1 christos /* lsl $rd,$rn,$shift */
1781 1.1 christos {
1782 1.1 christos EPIPHANY_INSN_LSLI16, "lsli16", "lsl", 16,
1783 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1784 1.1 christos },
1785 1.1 christos /* lsl $rd6,$rn6,$shift */
1786 1.1 christos {
1787 1.1 christos EPIPHANY_INSN_LSLI32, "lsli32", "lsl", 32,
1788 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1789 1.1 christos },
1790 1.1 christos /* asr $rd,$rn,$shift */
1791 1.1 christos {
1792 1.1 christos EPIPHANY_INSN_ASRI16, "asri16", "asr", 16,
1793 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1794 1.1 christos },
1795 1.1 christos /* asr $rd6,$rn6,$shift */
1796 1.1 christos {
1797 1.1 christos EPIPHANY_INSN_ASRI32, "asri32", "asr", 32,
1798 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1799 1.1 christos },
1800 1.1 christos /* bitr $rd,$rn */
1801 1.1 christos {
1802 1.1 christos EPIPHANY_INSN_BITR16, "bitr16", "bitr", 16,
1803 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1804 1.1 christos },
1805 1.1 christos /* bitr $rd6,$rn6 */
1806 1.1 christos {
1807 1.1 christos EPIPHANY_INSN_BITR, "bitr", "bitr", 32,
1808 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1809 1.1 christos },
1810 1.1 christos /* fext $rd6,$rn6,$rm6 */
1811 1.1 christos {
1812 1.1 christos EPIPHANY_INSN_FEXT, "fext", "fext", 32,
1813 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1814 1.1 christos },
1815 1.1 christos /* fdep $rd6,$rn6,$rm6 */
1816 1.1 christos {
1817 1.1 christos EPIPHANY_INSN_FDEP, "fdep", "fdep", 32,
1818 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1819 1.1 christos },
1820 1.1 christos /* lfsr $rd6,$rn6,$rm6 */
1821 1.1 christos {
1822 1.1 christos EPIPHANY_INSN_LFSR, "lfsr", "lfsr", 32,
1823 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1824 1.1 christos },
1825 1.1 christos /* mov.b $rd,$imm8 */
1826 1.1 christos {
1827 1.1 christos EPIPHANY_INSN_MOV8, "mov8", "mov.b", 16,
1828 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1829 1.1 christos },
1830 1.1 christos /* mov.l $rd6,$imm16 */
1831 1.1 christos {
1832 1.1 christos EPIPHANY_INSN_MOV16, "mov16", "mov.l", 32,
1833 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1834 1.1 christos },
1835 1.1 christos /* movt $rd6,$imm16 */
1836 1.1 christos {
1837 1.1 christos EPIPHANY_INSN_MOVT, "movt", "movt", 32,
1838 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1839 1.1 christos },
1840 1.1 christos /* fadd $rd,$rn,$rm */
1841 1.1 christos {
1842 1.1 christos EPIPHANY_INSN_F_ADDF16, "f_addf16", "fadd", 16,
1843 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1844 1.1 christos },
1845 1.1 christos /* fadd $rd6,$rn6,$rm6 */
1846 1.1 christos {
1847 1.1 christos EPIPHANY_INSN_F_ADDF32, "f_addf32", "fadd", 32,
1848 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1849 1.1 christos },
1850 1.1 christos /* fsub $rd,$rn,$rm */
1851 1.1 christos {
1852 1.1 christos EPIPHANY_INSN_F_SUBF16, "f_subf16", "fsub", 16,
1853 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1854 1.1 christos },
1855 1.1 christos /* fsub $rd6,$rn6,$rm6 */
1856 1.1 christos {
1857 1.1 christos EPIPHANY_INSN_F_SUBF32, "f_subf32", "fsub", 32,
1858 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1859 1.1 christos },
1860 1.1 christos /* fmul $rd,$rn,$rm */
1861 1.1 christos {
1862 1.1 christos EPIPHANY_INSN_F_MULF16, "f_mulf16", "fmul", 16,
1863 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1864 1.1 christos },
1865 1.1 christos /* fmul $rd6,$rn6,$rm6 */
1866 1.1 christos {
1867 1.1 christos EPIPHANY_INSN_F_MULF32, "f_mulf32", "fmul", 32,
1868 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1869 1.1 christos },
1870 1.1 christos /* fmadd $rd,$rn,$rm */
1871 1.1 christos {
1872 1.1 christos EPIPHANY_INSN_F_MADDF16, "f_maddf16", "fmadd", 16,
1873 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1874 1.1 christos },
1875 1.1 christos /* fmadd $rd6,$rn6,$rm6 */
1876 1.1 christos {
1877 1.1 christos EPIPHANY_INSN_F_MADDF32, "f_maddf32", "fmadd", 32,
1878 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1879 1.1 christos },
1880 1.1 christos /* fmsub $rd,$rn,$rm */
1881 1.1 christos {
1882 1.1 christos EPIPHANY_INSN_F_MSUBF16, "f_msubf16", "fmsub", 16,
1883 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1884 1.1 christos },
1885 1.1 christos /* fmsub $rd6,$rn6,$rm6 */
1886 1.1 christos {
1887 1.1 christos EPIPHANY_INSN_F_MSUBF32, "f_msubf32", "fmsub", 32,
1888 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1889 1.1 christos },
1890 1.1 christos /* fabs rd,rn */
1891 1.1 christos {
1892 1.1 christos EPIPHANY_INSN_F_ABSF16, "f_absf16", "fabs", 16,
1893 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1894 1.1 christos },
1895 1.1 christos /* fabs $rd6,$rn6 */
1896 1.1 christos {
1897 1.1 christos EPIPHANY_INSN_F_ABSF32, "f_absf32", "fabs", 32,
1898 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1899 1.1 christos },
1900 1.1 christos /* float $rd,$rn */
1901 1.1 christos {
1902 1.1 christos EPIPHANY_INSN_F_LOATF16, "f_loatf16", "float", 16,
1903 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1904 1.1 christos },
1905 1.1 christos /* float $rd6,$rn6 */
1906 1.1 christos {
1907 1.1 christos EPIPHANY_INSN_F_LOATF32, "f_loatf32", "float", 32,
1908 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1909 1.1 christos },
1910 1.1 christos /* fix $rd,$rn */
1911 1.1 christos {
1912 1.1 christos EPIPHANY_INSN_F_IXF16, "f_ixf16", "fix", 16,
1913 1.1 christos { 0|A(SHORT_INSN)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1914 1.1 christos },
1915 1.1 christos /* fix $rd6,$rn6 */
1916 1.1 christos {
1917 1.1 christos EPIPHANY_INSN_F_IXF32, "f_ixf32", "fix", 32,
1918 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1919 1.1 christos },
1920 1.1 christos /* frecip $frd6,$frn6 */
1921 1.1 christos {
1922 1.1 christos EPIPHANY_INSN_F_RECIPF32, "f_recipf32", "frecip", 32,
1923 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1924 1.1 christos },
1925 1.1 christos /* fsqrt $frd6,$frn6 */
1926 1.1 christos {
1927 1.1 christos EPIPHANY_INSN_F_SQRTF32, "f_sqrtf32", "fsqrt", 32,
1928 1.1 christos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
1929 1.1 christos },
1930 1.1 christos };
1931 1.1 christos
1932 1.1 christos #undef OP
1933 1.1 christos #undef A
1934 1.1 christos
1935 1.1 christos /* Initialize anything needed to be done once, before any cpu_open call. */
1936 1.1 christos
1937 1.1 christos static void
1938 1.1 christos init_tables (void)
1939 1.1 christos {
1940 1.1 christos }
1941 1.1 christos
1942 1.1.1.5 christos #ifndef opcodes_error_handler
1943 1.1.1.5 christos #define opcodes_error_handler(...) \
1944 1.1.1.5 christos fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
1945 1.1.1.5 christos #endif
1946 1.1.1.5 christos
1947 1.1 christos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
1948 1.1 christos static void build_hw_table (CGEN_CPU_TABLE *);
1949 1.1 christos static void build_ifield_table (CGEN_CPU_TABLE *);
1950 1.1 christos static void build_operand_table (CGEN_CPU_TABLE *);
1951 1.1 christos static void build_insn_table (CGEN_CPU_TABLE *);
1952 1.1 christos static void epiphany_cgen_rebuild_tables (CGEN_CPU_TABLE *);
1953 1.1 christos
1954 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to look up a mach via its bfd name. */
1955 1.1 christos
1956 1.1 christos static const CGEN_MACH *
1957 1.1 christos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1958 1.1 christos {
1959 1.1 christos while (table->name)
1960 1.1 christos {
1961 1.1 christos if (strcmp (name, table->bfd_name) == 0)
1962 1.1 christos return table;
1963 1.1 christos ++table;
1964 1.1 christos }
1965 1.1.1.4 christos return NULL;
1966 1.1 christos }
1967 1.1 christos
1968 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
1969 1.1 christos
1970 1.1 christos static void
1971 1.1 christos build_hw_table (CGEN_CPU_TABLE *cd)
1972 1.1 christos {
1973 1.1 christos int i;
1974 1.1 christos int machs = cd->machs;
1975 1.1 christos const CGEN_HW_ENTRY *init = & epiphany_cgen_hw_table[0];
1976 1.1 christos /* MAX_HW is only an upper bound on the number of selected entries.
1977 1.1 christos However each entry is indexed by it's enum so there can be holes in
1978 1.1 christos the table. */
1979 1.1 christos const CGEN_HW_ENTRY **selected =
1980 1.1 christos (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1981 1.1 christos
1982 1.1 christos cd->hw_table.init_entries = init;
1983 1.1 christos cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1984 1.1 christos memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1985 1.1 christos /* ??? For now we just use machs to determine which ones we want. */
1986 1.1 christos for (i = 0; init[i].name != NULL; ++i)
1987 1.1 christos if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1988 1.1 christos & machs)
1989 1.1 christos selected[init[i].type] = &init[i];
1990 1.1 christos cd->hw_table.entries = selected;
1991 1.1 christos cd->hw_table.num_entries = MAX_HW;
1992 1.1 christos }
1993 1.1 christos
1994 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
1995 1.1 christos
1996 1.1 christos static void
1997 1.1 christos build_ifield_table (CGEN_CPU_TABLE *cd)
1998 1.1 christos {
1999 1.1 christos cd->ifld_table = & epiphany_cgen_ifld_table[0];
2000 1.1 christos }
2001 1.1 christos
2002 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
2003 1.1 christos
2004 1.1 christos static void
2005 1.1 christos build_operand_table (CGEN_CPU_TABLE *cd)
2006 1.1 christos {
2007 1.1 christos int i;
2008 1.1 christos int machs = cd->machs;
2009 1.1 christos const CGEN_OPERAND *init = & epiphany_cgen_operand_table[0];
2010 1.1 christos /* MAX_OPERANDS is only an upper bound on the number of selected entries.
2011 1.1 christos However each entry is indexed by it's enum so there can be holes in
2012 1.1 christos the table. */
2013 1.1 christos const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
2014 1.1 christos
2015 1.1 christos cd->operand_table.init_entries = init;
2016 1.1 christos cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
2017 1.1 christos memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
2018 1.1 christos /* ??? For now we just use mach to determine which ones we want. */
2019 1.1 christos for (i = 0; init[i].name != NULL; ++i)
2020 1.1 christos if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
2021 1.1 christos & machs)
2022 1.1 christos selected[init[i].type] = &init[i];
2023 1.1 christos cd->operand_table.entries = selected;
2024 1.1 christos cd->operand_table.num_entries = MAX_OPERANDS;
2025 1.1 christos }
2026 1.1 christos
2027 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to build the hardware table.
2028 1.1 christos ??? This could leave out insns not supported by the specified mach/isa,
2029 1.1 christos but that would cause errors like "foo only supported by bar" to become
2030 1.1 christos "unknown insn", so for now we include all insns and require the app to
2031 1.1 christos do the checking later.
2032 1.1 christos ??? On the other hand, parsing of such insns may require their hardware or
2033 1.1 christos operand elements to be in the table [which they mightn't be]. */
2034 1.1 christos
2035 1.1 christos static void
2036 1.1 christos build_insn_table (CGEN_CPU_TABLE *cd)
2037 1.1 christos {
2038 1.1 christos int i;
2039 1.1 christos const CGEN_IBASE *ib = & epiphany_cgen_insn_table[0];
2040 1.1 christos CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
2041 1.1 christos
2042 1.1 christos memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
2043 1.1 christos for (i = 0; i < MAX_INSNS; ++i)
2044 1.1 christos insns[i].base = &ib[i];
2045 1.1 christos cd->insn_table.init_entries = insns;
2046 1.1 christos cd->insn_table.entry_size = sizeof (CGEN_IBASE);
2047 1.1 christos cd->insn_table.num_init_entries = MAX_INSNS;
2048 1.1 christos }
2049 1.1 christos
2050 1.1 christos /* Subroutine of epiphany_cgen_cpu_open to rebuild the tables. */
2051 1.1 christos
2052 1.1 christos static void
2053 1.1 christos epiphany_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
2054 1.1 christos {
2055 1.1 christos int i;
2056 1.1 christos CGEN_BITSET *isas = cd->isas;
2057 1.1 christos unsigned int machs = cd->machs;
2058 1.1 christos
2059 1.1 christos cd->int_insn_p = CGEN_INT_INSN_P;
2060 1.1 christos
2061 1.1 christos /* Data derived from the isa spec. */
2062 1.1 christos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
2063 1.1 christos cd->default_insn_bitsize = UNSET;
2064 1.1 christos cd->base_insn_bitsize = UNSET;
2065 1.1 christos cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
2066 1.1 christos cd->max_insn_bitsize = 0;
2067 1.1 christos for (i = 0; i < MAX_ISAS; ++i)
2068 1.1 christos if (cgen_bitset_contains (isas, i))
2069 1.1 christos {
2070 1.1 christos const CGEN_ISA *isa = & epiphany_cgen_isa_table[i];
2071 1.1 christos
2072 1.1 christos /* Default insn sizes of all selected isas must be
2073 1.1 christos equal or we set the result to 0, meaning "unknown". */
2074 1.1 christos if (cd->default_insn_bitsize == UNSET)
2075 1.1 christos cd->default_insn_bitsize = isa->default_insn_bitsize;
2076 1.1 christos else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
2077 1.1 christos ; /* This is ok. */
2078 1.1 christos else
2079 1.1 christos cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
2080 1.1 christos
2081 1.1 christos /* Base insn sizes of all selected isas must be equal
2082 1.1 christos or we set the result to 0, meaning "unknown". */
2083 1.1 christos if (cd->base_insn_bitsize == UNSET)
2084 1.1 christos cd->base_insn_bitsize = isa->base_insn_bitsize;
2085 1.1 christos else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
2086 1.1 christos ; /* This is ok. */
2087 1.1 christos else
2088 1.1 christos cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
2089 1.1 christos
2090 1.1 christos /* Set min,max insn sizes. */
2091 1.1 christos if (isa->min_insn_bitsize < cd->min_insn_bitsize)
2092 1.1 christos cd->min_insn_bitsize = isa->min_insn_bitsize;
2093 1.1 christos if (isa->max_insn_bitsize > cd->max_insn_bitsize)
2094 1.1 christos cd->max_insn_bitsize = isa->max_insn_bitsize;
2095 1.1 christos }
2096 1.1 christos
2097 1.1 christos /* Data derived from the mach spec. */
2098 1.1 christos for (i = 0; i < MAX_MACHS; ++i)
2099 1.1 christos if (((1 << i) & machs) != 0)
2100 1.1 christos {
2101 1.1 christos const CGEN_MACH *mach = & epiphany_cgen_mach_table[i];
2102 1.1 christos
2103 1.1 christos if (mach->insn_chunk_bitsize != 0)
2104 1.1 christos {
2105 1.1 christos if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
2106 1.1 christos {
2107 1.1.1.5 christos opcodes_error_handler
2108 1.1.1.5 christos (/* xgettext:c-format */
2109 1.1.1.5 christos _("internal error: epiphany_cgen_rebuild_tables: "
2110 1.1.1.5 christos "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
2111 1.1.1.5 christos cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
2112 1.1 christos abort ();
2113 1.1 christos }
2114 1.1 christos
2115 1.1 christos cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
2116 1.1 christos }
2117 1.1 christos }
2118 1.1 christos
2119 1.1 christos /* Determine which hw elements are used by MACH. */
2120 1.1 christos build_hw_table (cd);
2121 1.1 christos
2122 1.1 christos /* Build the ifield table. */
2123 1.1 christos build_ifield_table (cd);
2124 1.1 christos
2125 1.1 christos /* Determine which operands are used by MACH/ISA. */
2126 1.1 christos build_operand_table (cd);
2127 1.1 christos
2128 1.1 christos /* Build the instruction table. */
2129 1.1 christos build_insn_table (cd);
2130 1.1 christos }
2131 1.1 christos
2132 1.1 christos /* Initialize a cpu table and return a descriptor.
2133 1.1 christos It's much like opening a file, and must be the first function called.
2134 1.1 christos The arguments are a set of (type/value) pairs, terminated with
2135 1.1 christos CGEN_CPU_OPEN_END.
2136 1.1 christos
2137 1.1 christos Currently supported values:
2138 1.1 christos CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
2139 1.1 christos CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
2140 1.1 christos CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
2141 1.1 christos CGEN_CPU_OPEN_ENDIAN: specify endian choice
2142 1.1.1.6 christos CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
2143 1.1 christos CGEN_CPU_OPEN_END: terminates arguments
2144 1.1 christos
2145 1.1 christos ??? Simultaneous multiple isas might not make sense, but it's not (yet)
2146 1.1 christos precluded. */
2147 1.1 christos
2148 1.1 christos CGEN_CPU_DESC
2149 1.1 christos epiphany_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
2150 1.1 christos {
2151 1.1 christos CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
2152 1.1 christos static int init_p;
2153 1.1 christos CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
2154 1.1 christos unsigned int machs = 0; /* 0 = "unspecified" */
2155 1.1 christos enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
2156 1.1.1.6 christos enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
2157 1.1 christos va_list ap;
2158 1.1 christos
2159 1.1 christos if (! init_p)
2160 1.1 christos {
2161 1.1 christos init_tables ();
2162 1.1 christos init_p = 1;
2163 1.1 christos }
2164 1.1 christos
2165 1.1 christos memset (cd, 0, sizeof (*cd));
2166 1.1 christos
2167 1.1 christos va_start (ap, arg_type);
2168 1.1 christos while (arg_type != CGEN_CPU_OPEN_END)
2169 1.1 christos {
2170 1.1 christos switch (arg_type)
2171 1.1 christos {
2172 1.1 christos case CGEN_CPU_OPEN_ISAS :
2173 1.1 christos isas = va_arg (ap, CGEN_BITSET *);
2174 1.1 christos break;
2175 1.1 christos case CGEN_CPU_OPEN_MACHS :
2176 1.1 christos machs = va_arg (ap, unsigned int);
2177 1.1 christos break;
2178 1.1 christos case CGEN_CPU_OPEN_BFDMACH :
2179 1.1 christos {
2180 1.1 christos const char *name = va_arg (ap, const char *);
2181 1.1 christos const CGEN_MACH *mach =
2182 1.1 christos lookup_mach_via_bfd_name (epiphany_cgen_mach_table, name);
2183 1.1 christos
2184 1.1.1.4 christos if (mach != NULL)
2185 1.1.1.4 christos machs |= 1 << mach->num;
2186 1.1 christos break;
2187 1.1 christos }
2188 1.1 christos case CGEN_CPU_OPEN_ENDIAN :
2189 1.1 christos endian = va_arg (ap, enum cgen_endian);
2190 1.1 christos break;
2191 1.1.1.6 christos case CGEN_CPU_OPEN_INSN_ENDIAN :
2192 1.1.1.6 christos insn_endian = va_arg (ap, enum cgen_endian);
2193 1.1.1.6 christos break;
2194 1.1 christos default :
2195 1.1.1.5 christos opcodes_error_handler
2196 1.1.1.5 christos (/* xgettext:c-format */
2197 1.1.1.5 christos _("internal error: epiphany_cgen_cpu_open: "
2198 1.1.1.5 christos "unsupported argument `%d'"),
2199 1.1.1.5 christos arg_type);
2200 1.1 christos abort (); /* ??? return NULL? */
2201 1.1 christos }
2202 1.1 christos arg_type = va_arg (ap, enum cgen_cpu_open_arg);
2203 1.1 christos }
2204 1.1 christos va_end (ap);
2205 1.1 christos
2206 1.1 christos /* Mach unspecified means "all". */
2207 1.1 christos if (machs == 0)
2208 1.1 christos machs = (1 << MAX_MACHS) - 1;
2209 1.1 christos /* Base mach is always selected. */
2210 1.1 christos machs |= 1;
2211 1.1 christos if (endian == CGEN_ENDIAN_UNKNOWN)
2212 1.1 christos {
2213 1.1 christos /* ??? If target has only one, could have a default. */
2214 1.1.1.5 christos opcodes_error_handler
2215 1.1.1.5 christos (/* xgettext:c-format */
2216 1.1.1.5 christos _("internal error: epiphany_cgen_cpu_open: no endianness specified"));
2217 1.1 christos abort ();
2218 1.1 christos }
2219 1.1 christos
2220 1.1 christos cd->isas = cgen_bitset_copy (isas);
2221 1.1 christos cd->machs = machs;
2222 1.1 christos cd->endian = endian;
2223 1.1.1.6 christos cd->insn_endian
2224 1.1.1.6 christos = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
2225 1.1 christos
2226 1.1 christos /* Table (re)builder. */
2227 1.1 christos cd->rebuild_tables = epiphany_cgen_rebuild_tables;
2228 1.1 christos epiphany_cgen_rebuild_tables (cd);
2229 1.1 christos
2230 1.1 christos /* Default to not allowing signed overflow. */
2231 1.1 christos cd->signed_overflow_ok_p = 0;
2232 1.1.1.3 christos
2233 1.1 christos return (CGEN_CPU_DESC) cd;
2234 1.1 christos }
2235 1.1 christos
2236 1.1 christos /* Cover fn to epiphany_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
2237 1.1 christos MACH_NAME is the bfd name of the mach. */
2238 1.1 christos
2239 1.1 christos CGEN_CPU_DESC
2240 1.1 christos epiphany_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
2241 1.1 christos {
2242 1.1 christos return epiphany_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
2243 1.1 christos CGEN_CPU_OPEN_ENDIAN, endian,
2244 1.1 christos CGEN_CPU_OPEN_END);
2245 1.1 christos }
2246 1.1 christos
2247 1.1 christos /* Close a cpu table.
2248 1.1 christos ??? This can live in a machine independent file, but there's currently
2249 1.1 christos no place to put this file (there's no libcgen). libopcodes is the wrong
2250 1.1 christos place as some simulator ports use this but they don't use libopcodes. */
2251 1.1 christos
2252 1.1 christos void
2253 1.1 christos epiphany_cgen_cpu_close (CGEN_CPU_DESC cd)
2254 1.1 christos {
2255 1.1 christos unsigned int i;
2256 1.1 christos const CGEN_INSN *insns;
2257 1.1 christos
2258 1.1 christos if (cd->macro_insn_table.init_entries)
2259 1.1 christos {
2260 1.1 christos insns = cd->macro_insn_table.init_entries;
2261 1.1 christos for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
2262 1.1 christos if (CGEN_INSN_RX ((insns)))
2263 1.1 christos regfree (CGEN_INSN_RX (insns));
2264 1.1 christos }
2265 1.1 christos
2266 1.1 christos if (cd->insn_table.init_entries)
2267 1.1 christos {
2268 1.1 christos insns = cd->insn_table.init_entries;
2269 1.1 christos for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
2270 1.1 christos if (CGEN_INSN_RX (insns))
2271 1.1 christos regfree (CGEN_INSN_RX (insns));
2272 1.1.1.3 christos }
2273 1.1 christos
2274 1.1.1.6 christos free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
2275 1.1.1.6 christos free ((CGEN_INSN *) cd->insn_table.init_entries);
2276 1.1.1.6 christos free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
2277 1.1.1.6 christos free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
2278 1.1 christos free (cd);
2279 1.1 christos }
2280 1.1 christos
2281