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