1 /* CPU data for epiphany.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 Free Software Foundation, Inc.
7 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
31 #include "epiphany-desc.h"
32 #include "epiphany-opc.h"
34 #include "libiberty.h"
39 static const CGEN_ATTR_ENTRY bool_attr
[] =
46 static const CGEN_ATTR_ENTRY MACH_attr
[] ATTRIBUTE_UNUSED
=
48 { "base", MACH_BASE
},
49 { "epiphany32", MACH_EPIPHANY32
},
54 static const CGEN_ATTR_ENTRY ISA_attr
[] ATTRIBUTE_UNUSED
=
56 { "epiphany", ISA_EPIPHANY
},
61 const CGEN_ATTR_TABLE epiphany_cgen_ifield_attr_table
[] =
63 { "MACH", & MACH_attr
[0], & MACH_attr
[0] },
64 { "VIRTUAL", &bool_attr
[0], &bool_attr
[0] },
65 { "PCREL-ADDR", &bool_attr
[0], &bool_attr
[0] },
66 { "ABS-ADDR", &bool_attr
[0], &bool_attr
[0] },
67 { "RESERVED", &bool_attr
[0], &bool_attr
[0] },
68 { "SIGN-OPT", &bool_attr
[0], &bool_attr
[0] },
69 { "SIGNED", &bool_attr
[0], &bool_attr
[0] },
70 { "RELOC", &bool_attr
[0], &bool_attr
[0] },
74 const CGEN_ATTR_TABLE epiphany_cgen_hardware_attr_table
[] =
76 { "MACH", & MACH_attr
[0], & MACH_attr
[0] },
77 { "VIRTUAL", &bool_attr
[0], &bool_attr
[0] },
78 { "CACHE-ADDR", &bool_attr
[0], &bool_attr
[0] },
79 { "PC", &bool_attr
[0], &bool_attr
[0] },
80 { "PROFILE", &bool_attr
[0], &bool_attr
[0] },
84 const CGEN_ATTR_TABLE epiphany_cgen_operand_attr_table
[] =
86 { "MACH", & MACH_attr
[0], & MACH_attr
[0] },
87 { "VIRTUAL", &bool_attr
[0], &bool_attr
[0] },
88 { "PCREL-ADDR", &bool_attr
[0], &bool_attr
[0] },
89 { "ABS-ADDR", &bool_attr
[0], &bool_attr
[0] },
90 { "SIGN-OPT", &bool_attr
[0], &bool_attr
[0] },
91 { "SIGNED", &bool_attr
[0], &bool_attr
[0] },
92 { "NEGATIVE", &bool_attr
[0], &bool_attr
[0] },
93 { "RELAX", &bool_attr
[0], &bool_attr
[0] },
94 { "SEM-ONLY", &bool_attr
[0], &bool_attr
[0] },
95 { "RELOC", &bool_attr
[0], &bool_attr
[0] },
99 const CGEN_ATTR_TABLE epiphany_cgen_insn_attr_table
[] =
101 { "MACH", & MACH_attr
[0], & MACH_attr
[0] },
102 { "ALIAS", &bool_attr
[0], &bool_attr
[0] },
103 { "VIRTUAL", &bool_attr
[0], &bool_attr
[0] },
104 { "UNCOND-CTI", &bool_attr
[0], &bool_attr
[0] },
105 { "COND-CTI", &bool_attr
[0], &bool_attr
[0] },
106 { "SKIP-CTI", &bool_attr
[0], &bool_attr
[0] },
107 { "DELAY-SLOT", &bool_attr
[0], &bool_attr
[0] },
108 { "RELAXABLE", &bool_attr
[0], &bool_attr
[0] },
109 { "RELAXED", &bool_attr
[0], &bool_attr
[0] },
110 { "NO-DIS", &bool_attr
[0], &bool_attr
[0] },
111 { "PBB", &bool_attr
[0], &bool_attr
[0] },
112 { "SHORT-INSN", &bool_attr
[0], &bool_attr
[0] },
113 { "IMM3", &bool_attr
[0], &bool_attr
[0] },
114 { "IMM8", &bool_attr
[0], &bool_attr
[0] },
118 /* Instruction set variants. */
120 static const CGEN_ISA epiphany_cgen_isa_table
[] = {
121 { "epiphany", 32, 32, 16, 32 },
125 /* Machine variants. */
127 static const CGEN_MACH epiphany_cgen_mach_table
[] = {
128 { "epiphany32", "epiphany32", MACH_EPIPHANY32
, 0 },
132 static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_gr_names_entries
[] =
134 { "fp", 11, {0, {{{0, 0}}}}, 0, 0 },
135 { "sp", 13, {0, {{{0, 0}}}}, 0, 0 },
136 { "lr", 14, {0, {{{0, 0}}}}, 0, 0 },
137 { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
138 { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
139 { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
140 { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
141 { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
142 { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
143 { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
144 { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
145 { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
146 { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
147 { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
148 { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
149 { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
150 { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
151 { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
152 { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
153 { "r16", 16, {0, {{{0, 0}}}}, 0, 0 },
154 { "r17", 17, {0, {{{0, 0}}}}, 0, 0 },
155 { "r18", 18, {0, {{{0, 0}}}}, 0, 0 },
156 { "r19", 19, {0, {{{0, 0}}}}, 0, 0 },
157 { "r20", 20, {0, {{{0, 0}}}}, 0, 0 },
158 { "r21", 21, {0, {{{0, 0}}}}, 0, 0 },
159 { "r22", 22, {0, {{{0, 0}}}}, 0, 0 },
160 { "r23", 23, {0, {{{0, 0}}}}, 0, 0 },
161 { "r24", 24, {0, {{{0, 0}}}}, 0, 0 },
162 { "r25", 25, {0, {{{0, 0}}}}, 0, 0 },
163 { "r26", 26, {0, {{{0, 0}}}}, 0, 0 },
164 { "r27", 27, {0, {{{0, 0}}}}, 0, 0 },
165 { "r28", 28, {0, {{{0, 0}}}}, 0, 0 },
166 { "r29", 29, {0, {{{0, 0}}}}, 0, 0 },
167 { "r30", 30, {0, {{{0, 0}}}}, 0, 0 },
168 { "r31", 31, {0, {{{0, 0}}}}, 0, 0 },
169 { "r32", 32, {0, {{{0, 0}}}}, 0, 0 },
170 { "r33", 33, {0, {{{0, 0}}}}, 0, 0 },
171 { "r34", 34, {0, {{{0, 0}}}}, 0, 0 },
172 { "r35", 35, {0, {{{0, 0}}}}, 0, 0 },
173 { "r36", 36, {0, {{{0, 0}}}}, 0, 0 },
174 { "r37", 37, {0, {{{0, 0}}}}, 0, 0 },
175 { "r38", 38, {0, {{{0, 0}}}}, 0, 0 },
176 { "r39", 39, {0, {{{0, 0}}}}, 0, 0 },
177 { "r40", 40, {0, {{{0, 0}}}}, 0, 0 },
178 { "r41", 41, {0, {{{0, 0}}}}, 0, 0 },
179 { "r42", 42, {0, {{{0, 0}}}}, 0, 0 },
180 { "r43", 43, {0, {{{0, 0}}}}, 0, 0 },
181 { "r44", 44, {0, {{{0, 0}}}}, 0, 0 },
182 { "r45", 45, {0, {{{0, 0}}}}, 0, 0 },
183 { "r46", 46, {0, {{{0, 0}}}}, 0, 0 },
184 { "r47", 47, {0, {{{0, 0}}}}, 0, 0 },
185 { "r48", 48, {0, {{{0, 0}}}}, 0, 0 },
186 { "r49", 49, {0, {{{0, 0}}}}, 0, 0 },
187 { "r50", 50, {0, {{{0, 0}}}}, 0, 0 },
188 { "r51", 51, {0, {{{0, 0}}}}, 0, 0 },
189 { "r52", 52, {0, {{{0, 0}}}}, 0, 0 },
190 { "r53", 53, {0, {{{0, 0}}}}, 0, 0 },
191 { "r54", 54, {0, {{{0, 0}}}}, 0, 0 },
192 { "r55", 55, {0, {{{0, 0}}}}, 0, 0 },
193 { "r56", 56, {0, {{{0, 0}}}}, 0, 0 },
194 { "r57", 57, {0, {{{0, 0}}}}, 0, 0 },
195 { "r58", 58, {0, {{{0, 0}}}}, 0, 0 },
196 { "r59", 59, {0, {{{0, 0}}}}, 0, 0 },
197 { "r60", 60, {0, {{{0, 0}}}}, 0, 0 },
198 { "r61", 61, {0, {{{0, 0}}}}, 0, 0 },
199 { "r62", 62, {0, {{{0, 0}}}}, 0, 0 },
200 { "r63", 63, {0, {{{0, 0}}}}, 0, 0 },
201 { "a1", 0, {0, {{{0, 0}}}}, 0, 0 },
202 { "a2", 1, {0, {{{0, 0}}}}, 0, 0 },
203 { "a3", 2, {0, {{{0, 0}}}}, 0, 0 },
204 { "a4", 3, {0, {{{0, 0}}}}, 0, 0 },
205 { "v1", 4, {0, {{{0, 0}}}}, 0, 0 },
206 { "v2", 5, {0, {{{0, 0}}}}, 0, 0 },
207 { "v3", 6, {0, {{{0, 0}}}}, 0, 0 },
208 { "v4", 7, {0, {{{0, 0}}}}, 0, 0 },
209 { "v5", 8, {0, {{{0, 0}}}}, 0, 0 },
210 { "v6", 9, {0, {{{0, 0}}}}, 0, 0 },
211 { "v7", 10, {0, {{{0, 0}}}}, 0, 0 },
212 { "v8", 11, {0, {{{0, 0}}}}, 0, 0 },
213 { "sb", 9, {0, {{{0, 0}}}}, 0, 0 },
214 { "sl", 10, {0, {{{0, 0}}}}, 0, 0 },
215 { "ip", 12, {0, {{{0, 0}}}}, 0, 0 }
218 CGEN_KEYWORD epiphany_cgen_opval_gr_names
=
220 & epiphany_cgen_opval_gr_names_entries
[0],
225 static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_cr_names_entries
[] =
227 { "config", 0, {0, {{{0, 0}}}}, 0, 0 },
228 { "status", 1, {0, {{{0, 0}}}}, 0, 0 },
229 { "pc", 2, {0, {{{0, 0}}}}, 0, 0 },
230 { "debug", 3, {0, {{{0, 0}}}}, 0, 0 },
231 { "iab", 4, {0, {{{0, 0}}}}, 0, 0 },
232 { "lc", 5, {0, {{{0, 0}}}}, 0, 0 },
233 { "ls", 6, {0, {{{0, 0}}}}, 0, 0 },
234 { "le", 7, {0, {{{0, 0}}}}, 0, 0 },
235 { "iret", 8, {0, {{{0, 0}}}}, 0, 0 },
236 { "imask", 9, {0, {{{0, 0}}}}, 0, 0 },
237 { "ilat", 10, {0, {{{0, 0}}}}, 0, 0 },
238 { "ilatst", 11, {0, {{{0, 0}}}}, 0, 0 },
239 { "ilatcl", 12, {0, {{{0, 0}}}}, 0, 0 },
240 { "ipend", 13, {0, {{{0, 0}}}}, 0, 0 },
241 { "ctimer0", 14, {0, {{{0, 0}}}}, 0, 0 },
242 { "ctimer1", 15, {0, {{{0, 0}}}}, 0, 0 },
243 { "hstatus", 16, {0, {{{0, 0}}}}, 0, 0 }
246 CGEN_KEYWORD epiphany_cgen_opval_cr_names
=
248 & epiphany_cgen_opval_cr_names_entries
[0],
253 static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crdma_names_entries
[] =
255 { "dma0config", 0, {0, {{{0, 0}}}}, 0, 0 },
256 { "dma0stride", 1, {0, {{{0, 0}}}}, 0, 0 },
257 { "dma0count", 2, {0, {{{0, 0}}}}, 0, 0 },
258 { "dma0srcaddr", 3, {0, {{{0, 0}}}}, 0, 0 },
259 { "dma0dstaddr", 4, {0, {{{0, 0}}}}, 0, 0 },
260 { "dma0auto0", 5, {0, {{{0, 0}}}}, 0, 0 },
261 { "dma0auto1", 6, {0, {{{0, 0}}}}, 0, 0 },
262 { "dma0status", 7, {0, {{{0, 0}}}}, 0, 0 },
263 { "dma1config", 8, {0, {{{0, 0}}}}, 0, 0 },
264 { "dma1stride", 9, {0, {{{0, 0}}}}, 0, 0 },
265 { "dma1count", 10, {0, {{{0, 0}}}}, 0, 0 },
266 { "dma1srcaddr", 11, {0, {{{0, 0}}}}, 0, 0 },
267 { "dma1dstaddr", 12, {0, {{{0, 0}}}}, 0, 0 },
268 { "dma1auto0", 13, {0, {{{0, 0}}}}, 0, 0 },
269 { "dma1auto1", 14, {0, {{{0, 0}}}}, 0, 0 },
270 { "dma1status", 15, {0, {{{0, 0}}}}, 0, 0 }
273 CGEN_KEYWORD epiphany_cgen_opval_crdma_names
=
275 & epiphany_cgen_opval_crdma_names_entries
[0],
280 static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crmem_names_entries
[] =
282 { "memconfig", 0, {0, {{{0, 0}}}}, 0, 0 },
283 { "memstatus", 1, {0, {{{0, 0}}}}, 0, 0 },
284 { "memprotect", 2, {0, {{{0, 0}}}}, 0, 0 },
285 { "memreserve", 3, {0, {{{0, 0}}}}, 0, 0 }
288 CGEN_KEYWORD epiphany_cgen_opval_crmem_names
=
290 & epiphany_cgen_opval_crmem_names_entries
[0],
295 static CGEN_KEYWORD_ENTRY epiphany_cgen_opval_crmesh_names_entries
[] =
297 { "meshconfig", 0, {0, {{{0, 0}}}}, 0, 0 },
298 { "coreid", 1, {0, {{{0, 0}}}}, 0, 0 },
299 { "meshmulticast", 2, {0, {{{0, 0}}}}, 0, 0 },
300 { "swreset", 3, {0, {{{0, 0}}}}, 0, 0 }
303 CGEN_KEYWORD epiphany_cgen_opval_crmesh_names
=
305 & epiphany_cgen_opval_crmesh_names_entries
[0],
311 /* The hardware table. */
313 #define A(a) (1 << CGEN_HW_##a)
315 const CGEN_HW_ENTRY epiphany_cgen_hw_table
[] =
317 { "h-memory", HW_H_MEMORY
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
318 { "h-sint", HW_H_SINT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
319 { "h-uint", HW_H_UINT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
320 { "h-addr", HW_H_ADDR
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
321 { "h-iaddr", HW_H_IADDR
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
322 { "h-registers", HW_H_REGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_gr_names
, { 0|A(CACHE_ADDR
)|A(PROFILE
), { { { (1<<MACH_BASE
), 0 } } } } },
323 { "h-fpregisters", HW_H_FPREGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_gr_names
, { 0|A(VIRTUAL
)|A(PROFILE
), { { { (1<<MACH_BASE
), 0 } } } } },
324 { "h-zbit", HW_H_ZBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
325 { "h-nbit", HW_H_NBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
326 { "h-cbit", HW_H_CBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
327 { "h-vbit", HW_H_VBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
328 { "h-vsbit", HW_H_VSBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
329 { "h-bzbit", HW_H_BZBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
330 { "h-bnbit", HW_H_BNBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
331 { "h-bvbit", HW_H_BVBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
332 { "h-bubit", HW_H_BUBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
333 { "h-bibit", HW_H_BIBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
334 { "h-bcbit", HW_H_BCBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
335 { "h-bvsbit", HW_H_BVSBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
336 { "h-bisbit", HW_H_BISBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
337 { "h-busbit", HW_H_BUSBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
338 { "h-expcause0bit", HW_H_EXPCAUSE0BIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
339 { "h-expcause1bit", HW_H_EXPCAUSE1BIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
340 { "h-expcause2bit", HW_H_EXPCAUSE2BIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
341 { "h-extFstallbit", HW_H_EXTFSTALLBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
342 { "h-trmbit", HW_H_TRMBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
343 { "h-invExcEnbit", HW_H_INVEXCENBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
344 { "h-ovfExcEnbit", HW_H_OVFEXCENBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
345 { "h-unExcEnbit", HW_H_UNEXCENBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
346 { "h-timer0bit0", HW_H_TIMER0BIT0
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
347 { "h-timer0bit1", HW_H_TIMER0BIT1
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
348 { "h-timer0bit2", HW_H_TIMER0BIT2
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
349 { "h-timer0bit3", HW_H_TIMER0BIT3
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
350 { "h-timer1bit0", HW_H_TIMER1BIT0
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
351 { "h-timer1bit1", HW_H_TIMER1BIT1
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
352 { "h-timer1bit2", HW_H_TIMER1BIT2
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
353 { "h-timer1bit3", HW_H_TIMER1BIT3
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
354 { "h-mbkptEnbit", HW_H_MBKPTENBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
355 { "h-clockGateEnbit", HW_H_CLOCKGATEENBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
356 { "h-coreCfgResBit12", HW_H_CORECFGRESBIT12
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
357 { "h-coreCfgResBit13", HW_H_CORECFGRESBIT13
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
358 { "h-coreCfgResBit14", HW_H_CORECFGRESBIT14
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
359 { "h-coreCfgResBit15", HW_H_CORECFGRESBIT15
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
360 { "h-coreCfgResBit16", HW_H_CORECFGRESBIT16
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
361 { "h-coreCfgResBit20", HW_H_CORECFGRESBIT20
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
362 { "h-coreCfgResBit21", HW_H_CORECFGRESBIT21
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
363 { "h-coreCfgResBit24", HW_H_CORECFGRESBIT24
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
364 { "h-coreCfgResBit25", HW_H_CORECFGRESBIT25
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
365 { "h-coreCfgResBit26", HW_H_CORECFGRESBIT26
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
366 { "h-coreCfgResBit27", HW_H_CORECFGRESBIT27
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
367 { "h-coreCfgResBit28", HW_H_CORECFGRESBIT28
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
368 { "h-coreCfgResBit29", HW_H_CORECFGRESBIT29
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
369 { "h-coreCfgResBit30", HW_H_CORECFGRESBIT30
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
370 { "h-coreCfgResBit31", HW_H_CORECFGRESBIT31
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
371 { "h-arithmetic-modebit0", HW_H_ARITHMETIC_MODEBIT0
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
372 { "h-arithmetic-modebit1", HW_H_ARITHMETIC_MODEBIT1
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
373 { "h-arithmetic-modebit2", HW_H_ARITHMETIC_MODEBIT2
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
374 { "h-gidisablebit", HW_H_GIDISABLEBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
375 { "h-kmbit", HW_H_KMBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
376 { "h-caibit", HW_H_CAIBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
377 { "h-sflagbit", HW_H_SFLAGBIT
, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
378 { "h-pc", HW_H_PC
, CGEN_ASM_NONE
, 0, { 0|A(PROFILE
)|A(PC
), { { { (1<<MACH_BASE
), 0 } } } } },
379 { "h-memaddr", HW_H_MEMADDR
, CGEN_ASM_NONE
, 0, { 0|A(PROFILE
), { { { (1<<MACH_BASE
), 0 } } } } },
380 { "h-core-registers", HW_H_CORE_REGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_cr_names
, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
381 { "h-coredma-registers", HW_H_COREDMA_REGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_crdma_names
, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
382 { "h-coremem-registers", HW_H_COREMEM_REGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_crmem_names
, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
383 { "h-coremesh-registers", HW_H_COREMESH_REGISTERS
, CGEN_ASM_KEYWORD
, (PTR
) & epiphany_cgen_opval_crmesh_names
, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
384 { 0, 0, CGEN_ASM_NONE
, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } }
390 /* The instruction field table. */
392 #define A(a) (1 << CGEN_IFLD_##a)
394 const CGEN_IFLD epiphany_cgen_ifld_table
[] =
396 { EPIPHANY_F_NIL
, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
397 { EPIPHANY_F_ANYOF
, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
398 { EPIPHANY_F_OPC
, "f-opc", 0, 32, 3, 4, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
399 { EPIPHANY_F_OPC_4_1
, "f-opc-4-1", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
400 { EPIPHANY_F_OPC_6_3
, "f-opc-6-3", 0, 32, 6, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
401 { EPIPHANY_F_OPC_8_5
, "f-opc-8-5", 0, 32, 8, 5, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
402 { EPIPHANY_F_OPC_19_4
, "f-opc-19-4", 0, 32, 19, 4, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
403 { EPIPHANY_F_CONDCODE
, "f-condcode", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
404 { EPIPHANY_F_SECONDARY_CCS
, "f-secondary-ccs", 0, 32, 7, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
405 { EPIPHANY_F_SHIFT
, "f-shift", 0, 32, 9, 5, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
406 { EPIPHANY_F_WORDSIZE
, "f-wordsize", 0, 32, 6, 2, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
407 { EPIPHANY_F_STORE
, "f-store", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
408 { EPIPHANY_F_OPC_8_1
, "f-opc-8-1", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
409 { EPIPHANY_F_OPC_31_32
, "f-opc-31-32", 0, 32, 31, 32, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
410 { EPIPHANY_F_SIMM8
, "f-simm8", 0, 32, 15, 8, { 0|A(RELOC
)|A(PCREL_ADDR
), { { { (1<<MACH_BASE
), 0 } } } } },
411 { EPIPHANY_F_SIMM24
, "f-simm24", 0, 32, 31, 24, { 0|A(RELOC
)|A(PCREL_ADDR
), { { { (1<<MACH_BASE
), 0 } } } } },
412 { EPIPHANY_F_SDISP3
, "f-sdisp3", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
413 { EPIPHANY_F_DISP3
, "f-disp3", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
414 { EPIPHANY_F_DISP8
, "f-disp8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
415 { EPIPHANY_F_IMM8
, "f-imm8", 0, 32, 12, 8, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
416 { EPIPHANY_F_IMM_27_8
, "f-imm-27-8", 0, 32, 27, 8, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
417 { EPIPHANY_F_ADDSUBX
, "f-addsubx", 0, 32, 20, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
418 { EPIPHANY_F_SUBD
, "f-subd", 0, 32, 24, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
419 { EPIPHANY_F_PM
, "f-pm", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
420 { EPIPHANY_F_RM
, "f-rm", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
421 { EPIPHANY_F_RN
, "f-rn", 0, 32, 12, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
422 { EPIPHANY_F_RD
, "f-rd", 0, 32, 15, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
423 { EPIPHANY_F_RM_X
, "f-rm-x", 0, 32, 25, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
424 { EPIPHANY_F_RN_X
, "f-rn-x", 0, 32, 28, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
425 { EPIPHANY_F_RD_X
, "f-rd-x", 0, 32, 31, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
426 { EPIPHANY_F_DC_9_1
, "f-dc-9-1", 0, 32, 9, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
427 { EPIPHANY_F_SN
, "f-sn", 0, 32, 12, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
428 { EPIPHANY_F_SD
, "f-sd", 0, 32, 15, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
429 { EPIPHANY_F_SN_X
, "f-sn-x", 0, 32, 28, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
430 { EPIPHANY_F_SD_X
, "f-sd-x", 0, 32, 31, 3, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
431 { EPIPHANY_F_DC_7_4
, "f-dc-7-4", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
432 { EPIPHANY_F_TRAP_SWI_9_1
, "f-trap-swi-9-1", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
433 { EPIPHANY_F_GIEN_GIDIS_9_1
, "f-gien-gidis-9-1", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
434 { EPIPHANY_F_DC_15_3
, "f-dc-15-3", 0, 32, 15, 3, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
435 { EPIPHANY_F_DC_15_7
, "f-dc-15-7", 0, 32, 15, 7, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
436 { EPIPHANY_F_DC_15_6
, "f-dc-15-6", 0, 32, 15, 6, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
437 { EPIPHANY_F_TRAP_NUM
, "f-trap-num", 0, 32, 15, 6, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
438 { EPIPHANY_F_DC_20_1
, "f-dc-20-1", 0, 32, 20, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
439 { EPIPHANY_F_DC_21_1
, "f-dc-21-1", 0, 32, 21, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
440 { EPIPHANY_F_DC_21_2
, "f-dc-21-2", 0, 32, 21, 2, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
441 { EPIPHANY_F_DC_22_3
, "f-dc-22-3", 0, 32, 22, 3, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
442 { EPIPHANY_F_DC_22_2
, "f-dc-22-2", 0, 32, 22, 2, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
443 { EPIPHANY_F_DC_22_1
, "f-dc-22-1", 0, 32, 22, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
444 { EPIPHANY_F_DC_25_6
, "f-dc-25-6", 0, 32, 25, 6, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
445 { EPIPHANY_F_DC_25_4
, "f-dc-25-4", 0, 32, 25, 4, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
446 { EPIPHANY_F_DC_25_2
, "f-dc-25-2", 0, 32, 25, 2, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
447 { EPIPHANY_F_DC_25_1
, "f-dc-25-1", 0, 32, 25, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
448 { EPIPHANY_F_DC_28_1
, "f-dc-28-1", 0, 32, 28, 1, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
449 { EPIPHANY_F_DC_31_3
, "f-dc-31-3", 0, 32, 31, 3, { 0|A(RESERVED
), { { { (1<<MACH_BASE
), 0 } } } } },
450 { EPIPHANY_F_DISP11
, "f-disp11", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
451 { EPIPHANY_F_SDISP11
, "f-sdisp11", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
452 { EPIPHANY_F_IMM16
, "f-imm16", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
453 { EPIPHANY_F_RD6
, "f-rd6", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
454 { EPIPHANY_F_RN6
, "f-rn6", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
455 { EPIPHANY_F_RM6
, "f-rm6", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
456 { EPIPHANY_F_SD6
, "f-sd6", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
457 { EPIPHANY_F_SN6
, "f-sn6", 0, 0, 0, 0,{ 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
458 { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } }
465 /* multi ifield declarations */
467 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_DISP11_MULTI_IFIELD
[];
468 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SDISP11_MULTI_IFIELD
[];
469 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_IMM16_MULTI_IFIELD
[];
470 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RD6_MULTI_IFIELD
[];
471 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RN6_MULTI_IFIELD
[];
472 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RM6_MULTI_IFIELD
[];
473 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SD6_MULTI_IFIELD
[];
474 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SN6_MULTI_IFIELD
[];
477 /* multi ifield definitions */
479 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_DISP11_MULTI_IFIELD
[] =
481 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_DISP3
] } },
482 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_DISP8
] } },
483 { 0, { (const PTR
) 0 } }
485 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SDISP11_MULTI_IFIELD
[] =
487 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_DISP3
] } },
488 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_DISP8
] } },
489 { 0, { (const PTR
) 0 } }
491 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_IMM16_MULTI_IFIELD
[] =
493 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_IMM8
] } },
494 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_IMM_27_8
] } },
495 { 0, { (const PTR
) 0 } }
497 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RD6_MULTI_IFIELD
[] =
499 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RD_X
] } },
500 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RD
] } },
501 { 0, { (const PTR
) 0 } }
503 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RN6_MULTI_IFIELD
[] =
505 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RN_X
] } },
506 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RN
] } },
507 { 0, { (const PTR
) 0 } }
509 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_RM6_MULTI_IFIELD
[] =
511 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RM_X
] } },
512 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RM
] } },
513 { 0, { (const PTR
) 0 } }
515 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SD6_MULTI_IFIELD
[] =
517 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SD_X
] } },
518 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SD
] } },
519 { 0, { (const PTR
) 0 } }
521 const CGEN_MAYBE_MULTI_IFLD EPIPHANY_F_SN6_MULTI_IFIELD
[] =
523 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SN_X
] } },
524 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SN
] } },
525 { 0, { (const PTR
) 0 } }
528 /* The operand table. */
530 #define A(a) (1 << CGEN_OPERAND_##a)
531 #define OPERAND(op) EPIPHANY_OPERAND_##op
533 const CGEN_OPERAND epiphany_cgen_operand_table
[] =
535 /* pc: program counter */
536 { "pc", EPIPHANY_OPERAND_PC
, HW_H_PC
, 0, 0,
537 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_NIL
] } },
538 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
539 /* zbit: integer zero bit */
540 { "zbit", EPIPHANY_OPERAND_ZBIT
, HW_H_ZBIT
, 0, 0,
541 { 0, { (const PTR
) 0 } },
542 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
543 /* nbit: integer neg bit */
544 { "nbit", EPIPHANY_OPERAND_NBIT
, HW_H_NBIT
, 0, 0,
545 { 0, { (const PTR
) 0 } },
546 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
547 /* cbit: integer carry bit */
548 { "cbit", EPIPHANY_OPERAND_CBIT
, HW_H_CBIT
, 0, 0,
549 { 0, { (const PTR
) 0 } },
550 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
551 /* vbit: integer overflow bit */
552 { "vbit", EPIPHANY_OPERAND_VBIT
, HW_H_VBIT
, 0, 0,
553 { 0, { (const PTR
) 0 } },
554 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
555 /* bzbit: floating point zero bit */
556 { "bzbit", EPIPHANY_OPERAND_BZBIT
, HW_H_BZBIT
, 0, 0,
557 { 0, { (const PTR
) 0 } },
558 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
559 /* bnbit: floating point neg bit */
560 { "bnbit", EPIPHANY_OPERAND_BNBIT
, HW_H_BNBIT
, 0, 0,
561 { 0, { (const PTR
) 0 } },
562 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
563 /* bvbit: floating point ovfl bit */
564 { "bvbit", EPIPHANY_OPERAND_BVBIT
, HW_H_BVBIT
, 0, 0,
565 { 0, { (const PTR
) 0 } },
566 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
567 /* bcbit: floating point carry bit */
568 { "bcbit", EPIPHANY_OPERAND_BCBIT
, HW_H_BCBIT
, 0, 0,
569 { 0, { (const PTR
) 0 } },
570 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
571 /* bubit: floating point underfl bit */
572 { "bubit", EPIPHANY_OPERAND_BUBIT
, HW_H_BUBIT
, 0, 0,
573 { 0, { (const PTR
) 0 } },
574 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
575 /* bibit: floating point invalid bit */
576 { "bibit", EPIPHANY_OPERAND_BIBIT
, HW_H_BIBIT
, 0, 0,
577 { 0, { (const PTR
) 0 } },
578 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
579 /* vsbit: integer overflow sticky */
580 { "vsbit", EPIPHANY_OPERAND_VSBIT
, HW_H_VSBIT
, 0, 0,
581 { 0, { (const PTR
) 0 } },
582 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
583 /* bvsbit: floating point overflow sticky */
584 { "bvsbit", EPIPHANY_OPERAND_BVSBIT
, HW_H_BVSBIT
, 0, 0,
585 { 0, { (const PTR
) 0 } },
586 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
587 /* bisbit: floating point invalid sticky */
588 { "bisbit", EPIPHANY_OPERAND_BISBIT
, HW_H_BISBIT
, 0, 0,
589 { 0, { (const PTR
) 0 } },
590 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
591 /* busbit: floating point underflow sticky */
592 { "busbit", EPIPHANY_OPERAND_BUSBIT
, HW_H_BUSBIT
, 0, 0,
593 { 0, { (const PTR
) 0 } },
594 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
595 /* expcause0bit: exceprion cause bit0 */
596 { "expcause0bit", EPIPHANY_OPERAND_EXPCAUSE0BIT
, HW_H_EXPCAUSE0BIT
, 0, 0,
597 { 0, { (const PTR
) 0 } },
598 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
599 /* expcause1bit: exceprion cause bit1 */
600 { "expcause1bit", EPIPHANY_OPERAND_EXPCAUSE1BIT
, HW_H_EXPCAUSE1BIT
, 0, 0,
601 { 0, { (const PTR
) 0 } },
602 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
603 /* expcause2bit: external load stalled bit */
604 { "expcause2bit", EPIPHANY_OPERAND_EXPCAUSE2BIT
, HW_H_EXPCAUSE2BIT
, 0, 0,
605 { 0, { (const PTR
) 0 } },
606 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
607 /* extFstallbit: external fetch stalled bit */
608 { "extFstallbit", EPIPHANY_OPERAND_EXTFSTALLBIT
, HW_H_EXTFSTALLBIT
, 0, 0,
609 { 0, { (const PTR
) 0 } },
610 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
611 /* trmbit: 0=round to nearest, 1=trunacte selct bit */
612 { "trmbit", EPIPHANY_OPERAND_TRMBIT
, HW_H_TRMBIT
, 0, 0,
613 { 0, { (const PTR
) 0 } },
614 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
615 /* invExcEnbit: invalid exception enable bit */
616 { "invExcEnbit", EPIPHANY_OPERAND_INVEXCENBIT
, HW_H_INVEXCENBIT
, 0, 0,
617 { 0, { (const PTR
) 0 } },
618 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
619 /* ovfExcEnbit: overflow exception enable bit */
620 { "ovfExcEnbit", EPIPHANY_OPERAND_OVFEXCENBIT
, HW_H_OVFEXCENBIT
, 0, 0,
621 { 0, { (const PTR
) 0 } },
622 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
623 /* unExcEnbit: underflow exception enable bit */
624 { "unExcEnbit", EPIPHANY_OPERAND_UNEXCENBIT
, HW_H_UNEXCENBIT
, 0, 0,
625 { 0, { (const PTR
) 0 } },
626 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
627 /* timer0bit0: timer 0 mode selection 0 */
628 { "timer0bit0", EPIPHANY_OPERAND_TIMER0BIT0
, HW_H_TIMER0BIT0
, 0, 0,
629 { 0, { (const PTR
) 0 } },
630 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
631 /* timer0bit1: timer 0 mode selection 1 */
632 { "timer0bit1", EPIPHANY_OPERAND_TIMER0BIT1
, HW_H_TIMER0BIT1
, 0, 0,
633 { 0, { (const PTR
) 0 } },
634 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
635 /* timer0bit2: timer 0 mode selection 2 */
636 { "timer0bit2", EPIPHANY_OPERAND_TIMER0BIT2
, HW_H_TIMER0BIT2
, 0, 0,
637 { 0, { (const PTR
) 0 } },
638 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
639 /* timer0bit3: timer 0 mode selection 3 */
640 { "timer0bit3", EPIPHANY_OPERAND_TIMER0BIT3
, HW_H_TIMER0BIT3
, 0, 0,
641 { 0, { (const PTR
) 0 } },
642 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
643 /* timer1bit0: timer 1 mode selection 0 */
644 { "timer1bit0", EPIPHANY_OPERAND_TIMER1BIT0
, HW_H_TIMER1BIT0
, 0, 0,
645 { 0, { (const PTR
) 0 } },
646 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
647 /* timer1bit1: timer 1 mode selection 1 */
648 { "timer1bit1", EPIPHANY_OPERAND_TIMER1BIT1
, HW_H_TIMER1BIT1
, 0, 0,
649 { 0, { (const PTR
) 0 } },
650 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
651 /* timer1bit2: timer 1 mode selection 2 */
652 { "timer1bit2", EPIPHANY_OPERAND_TIMER1BIT2
, HW_H_TIMER1BIT2
, 0, 0,
653 { 0, { (const PTR
) 0 } },
654 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
655 /* timer1bit3: timer 1 mode selection 3 */
656 { "timer1bit3", EPIPHANY_OPERAND_TIMER1BIT3
, HW_H_TIMER1BIT3
, 0, 0,
657 { 0, { (const PTR
) 0 } },
658 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
659 /* mbkptEnbit: multicore bkpt enable */
660 { "mbkptEnbit", EPIPHANY_OPERAND_MBKPTENBIT
, HW_H_MBKPTENBIT
, 0, 0,
661 { 0, { (const PTR
) 0 } },
662 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
663 /* clockGateEnbit: clock gate enable enable */
664 { "clockGateEnbit", EPIPHANY_OPERAND_CLOCKGATEENBIT
, HW_H_CLOCKGATEENBIT
, 0, 0,
665 { 0, { (const PTR
) 0 } },
666 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
667 /* arithmetic-modebit0: arithmetic mode bit0 */
668 { "arithmetic-modebit0", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT0
, HW_H_ARITHMETIC_MODEBIT0
, 0, 0,
669 { 0, { (const PTR
) 0 } },
670 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
671 /* arithmetic-modebit1: arithmetic mode bit1 */
672 { "arithmetic-modebit1", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT1
, HW_H_ARITHMETIC_MODEBIT1
, 0, 0,
673 { 0, { (const PTR
) 0 } },
674 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
675 /* arithmetic-modebit2: arithmetic mode bit2 */
676 { "arithmetic-modebit2", EPIPHANY_OPERAND_ARITHMETIC_MODEBIT2
, HW_H_ARITHMETIC_MODEBIT2
, 0, 0,
677 { 0, { (const PTR
) 0 } },
678 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
679 /* coreCfgResBit12: core config bit 12 */
680 { "coreCfgResBit12", EPIPHANY_OPERAND_CORECFGRESBIT12
, HW_H_CORECFGRESBIT12
, 0, 0,
681 { 0, { (const PTR
) 0 } },
682 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
683 /* coreCfgResBit13: core config bit 13 */
684 { "coreCfgResBit13", EPIPHANY_OPERAND_CORECFGRESBIT13
, HW_H_CORECFGRESBIT13
, 0, 0,
685 { 0, { (const PTR
) 0 } },
686 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
687 /* coreCfgResBit14: core config bit 14 */
688 { "coreCfgResBit14", EPIPHANY_OPERAND_CORECFGRESBIT14
, HW_H_CORECFGRESBIT14
, 0, 0,
689 { 0, { (const PTR
) 0 } },
690 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
691 /* coreCfgResBit15: core config bit 15 */
692 { "coreCfgResBit15", EPIPHANY_OPERAND_CORECFGRESBIT15
, HW_H_CORECFGRESBIT15
, 0, 0,
693 { 0, { (const PTR
) 0 } },
694 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
695 /* coreCfgResBit16: core config bit 16 */
696 { "coreCfgResBit16", EPIPHANY_OPERAND_CORECFGRESBIT16
, HW_H_CORECFGRESBIT16
, 0, 0,
697 { 0, { (const PTR
) 0 } },
698 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
699 /* coreCfgResBit20: core config bit 20 */
700 { "coreCfgResBit20", EPIPHANY_OPERAND_CORECFGRESBIT20
, HW_H_CORECFGRESBIT20
, 0, 0,
701 { 0, { (const PTR
) 0 } },
702 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
703 /* coreCfgResBit21: core config bit 21 */
704 { "coreCfgResBit21", EPIPHANY_OPERAND_CORECFGRESBIT21
, HW_H_CORECFGRESBIT21
, 0, 0,
705 { 0, { (const PTR
) 0 } },
706 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
707 /* coreCfgResBit24: core config bit 24 */
708 { "coreCfgResBit24", EPIPHANY_OPERAND_CORECFGRESBIT24
, HW_H_CORECFGRESBIT24
, 0, 0,
709 { 0, { (const PTR
) 0 } },
710 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
711 /* coreCfgResBit25: core config bit 25 */
712 { "coreCfgResBit25", EPIPHANY_OPERAND_CORECFGRESBIT25
, HW_H_CORECFGRESBIT25
, 0, 0,
713 { 0, { (const PTR
) 0 } },
714 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
715 /* coreCfgResBit26: core config bit 26 */
716 { "coreCfgResBit26", EPIPHANY_OPERAND_CORECFGRESBIT26
, HW_H_CORECFGRESBIT26
, 0, 0,
717 { 0, { (const PTR
) 0 } },
718 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
719 /* coreCfgResBit27: core config bit 27 */
720 { "coreCfgResBit27", EPIPHANY_OPERAND_CORECFGRESBIT27
, HW_H_CORECFGRESBIT27
, 0, 0,
721 { 0, { (const PTR
) 0 } },
722 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
723 /* coreCfgResBit28: core config bit 28 */
724 { "coreCfgResBit28", EPIPHANY_OPERAND_CORECFGRESBIT28
, HW_H_CORECFGRESBIT28
, 0, 0,
725 { 0, { (const PTR
) 0 } },
726 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
727 /* coreCfgResBit29: core config bit 29 */
728 { "coreCfgResBit29", EPIPHANY_OPERAND_CORECFGRESBIT29
, HW_H_CORECFGRESBIT29
, 0, 0,
729 { 0, { (const PTR
) 0 } },
730 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
731 /* coreCfgResBit30: core config bit 30 */
732 { "coreCfgResBit30", EPIPHANY_OPERAND_CORECFGRESBIT30
, HW_H_CORECFGRESBIT30
, 0, 0,
733 { 0, { (const PTR
) 0 } },
734 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
735 /* coreCfgResBit31: core config bit 31 */
736 { "coreCfgResBit31", EPIPHANY_OPERAND_CORECFGRESBIT31
, HW_H_CORECFGRESBIT31
, 0, 0,
737 { 0, { (const PTR
) 0 } },
738 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
739 /* gidisablebit: global interrupt disable bit */
740 { "gidisablebit", EPIPHANY_OPERAND_GIDISABLEBIT
, HW_H_GIDISABLEBIT
, 0, 0,
741 { 0, { (const PTR
) 0 } },
742 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
743 /* kmbit: kernel mode bit */
744 { "kmbit", EPIPHANY_OPERAND_KMBIT
, HW_H_KMBIT
, 0, 0,
745 { 0, { (const PTR
) 0 } },
746 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
747 /* caibit: core actibe indicator bit */
748 { "caibit", EPIPHANY_OPERAND_CAIBIT
, HW_H_CAIBIT
, 0, 0,
749 { 0, { (const PTR
) 0 } },
750 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
751 /* sflagbit: sflag bit */
752 { "sflagbit", EPIPHANY_OPERAND_SFLAGBIT
, HW_H_SFLAGBIT
, 0, 0,
753 { 0, { (const PTR
) 0 } },
754 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
755 /* memaddr: memory effective address */
756 { "memaddr", EPIPHANY_OPERAND_MEMADDR
, HW_H_MEMADDR
, 0, 0,
757 { 0, { (const PTR
) 0 } },
758 { 0|A(SEM_ONLY
), { { { (1<<MACH_BASE
), 0 } } } } },
759 /* simm24: branch address pc-relative */
760 { "simm24", EPIPHANY_OPERAND_SIMM24
, HW_H_IADDR
, 31, 24,
761 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SIMM24
] } },
762 { 0|A(RELAX
)|A(RELOC
)|A(PCREL_ADDR
), { { { (1<<MACH_BASE
), 0 } } } } },
763 /* simm8: branch address pc-relative */
764 { "simm8", EPIPHANY_OPERAND_SIMM8
, HW_H_IADDR
, 15, 8,
765 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SIMM8
] } },
766 { 0|A(RELAX
)|A(RELOC
)|A(PCREL_ADDR
), { { { (1<<MACH_BASE
), 0 } } } } },
767 /* rd: destination register */
768 { "rd", EPIPHANY_OPERAND_RD
, HW_H_REGISTERS
, 15, 3,
769 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RD
] } },
770 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
771 /* rn: source register */
772 { "rn", EPIPHANY_OPERAND_RN
, HW_H_REGISTERS
, 12, 3,
773 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RN
] } },
774 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
775 /* rm: source register */
776 { "rm", EPIPHANY_OPERAND_RM
, HW_H_REGISTERS
, 9, 3,
777 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RM
] } },
778 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
779 /* frd: fp destination register */
780 { "frd", EPIPHANY_OPERAND_FRD
, HW_H_FPREGISTERS
, 15, 3,
781 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RD
] } },
782 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
783 /* frn: fp source register */
784 { "frn", EPIPHANY_OPERAND_FRN
, HW_H_FPREGISTERS
, 12, 3,
785 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RN
] } },
786 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
787 /* frm: fp source register */
788 { "frm", EPIPHANY_OPERAND_FRM
, HW_H_FPREGISTERS
, 9, 3,
789 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_RM
] } },
790 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
791 /* rd6: destination register */
792 { "rd6", EPIPHANY_OPERAND_RD6
, HW_H_REGISTERS
, 15, 6,
793 { 2, { (const PTR
) &EPIPHANY_F_RD6_MULTI_IFIELD
[0] } },
794 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
795 /* rn6: source register */
796 { "rn6", EPIPHANY_OPERAND_RN6
, HW_H_REGISTERS
, 12, 6,
797 { 2, { (const PTR
) &EPIPHANY_F_RN6_MULTI_IFIELD
[0] } },
798 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
799 /* rm6: source register */
800 { "rm6", EPIPHANY_OPERAND_RM6
, HW_H_REGISTERS
, 9, 6,
801 { 2, { (const PTR
) &EPIPHANY_F_RM6_MULTI_IFIELD
[0] } },
802 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
803 /* frd6: fp destination register */
804 { "frd6", EPIPHANY_OPERAND_FRD6
, HW_H_FPREGISTERS
, 15, 6,
805 { 2, { (const PTR
) &EPIPHANY_F_RD6_MULTI_IFIELD
[0] } },
806 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
807 /* frn6: fp source register */
808 { "frn6", EPIPHANY_OPERAND_FRN6
, HW_H_FPREGISTERS
, 12, 6,
809 { 2, { (const PTR
) &EPIPHANY_F_RN6_MULTI_IFIELD
[0] } },
810 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
811 /* frm6: fp source register */
812 { "frm6", EPIPHANY_OPERAND_FRM6
, HW_H_FPREGISTERS
, 9, 6,
813 { 2, { (const PTR
) &EPIPHANY_F_RM6_MULTI_IFIELD
[0] } },
814 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
815 /* sd: special destination */
816 { "sd", EPIPHANY_OPERAND_SD
, HW_H_CORE_REGISTERS
, 15, 3,
817 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SD
] } },
818 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
819 /* sn: special source */
820 { "sn", EPIPHANY_OPERAND_SN
, HW_H_CORE_REGISTERS
, 12, 3,
821 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SN
] } },
822 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
823 /* sd6: special destination register */
824 { "sd6", EPIPHANY_OPERAND_SD6
, HW_H_CORE_REGISTERS
, 15, 6,
825 { 2, { (const PTR
) &EPIPHANY_F_SD6_MULTI_IFIELD
[0] } },
826 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
827 /* sn6: special source register */
828 { "sn6", EPIPHANY_OPERAND_SN6
, HW_H_CORE_REGISTERS
, 12, 6,
829 { 2, { (const PTR
) &EPIPHANY_F_SN6_MULTI_IFIELD
[0] } },
830 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
831 /* sddma: dma register */
832 { "sddma", EPIPHANY_OPERAND_SDDMA
, HW_H_COREDMA_REGISTERS
, 15, 6,
833 { 2, { (const PTR
) &EPIPHANY_F_SD6_MULTI_IFIELD
[0] } },
834 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
835 /* sndma: dma register */
836 { "sndma", EPIPHANY_OPERAND_SNDMA
, HW_H_COREDMA_REGISTERS
, 12, 6,
837 { 2, { (const PTR
) &EPIPHANY_F_SN6_MULTI_IFIELD
[0] } },
838 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
839 /* sdmem: mem register */
840 { "sdmem", EPIPHANY_OPERAND_SDMEM
, HW_H_COREMEM_REGISTERS
, 15, 6,
841 { 2, { (const PTR
) &EPIPHANY_F_SD6_MULTI_IFIELD
[0] } },
842 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
843 /* snmem: mem register */
844 { "snmem", EPIPHANY_OPERAND_SNMEM
, HW_H_COREMEM_REGISTERS
, 12, 6,
845 { 2, { (const PTR
) &EPIPHANY_F_SN6_MULTI_IFIELD
[0] } },
846 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
847 /* sdmesh: mesh register */
848 { "sdmesh", EPIPHANY_OPERAND_SDMESH
, HW_H_COREMESH_REGISTERS
, 15, 6,
849 { 2, { (const PTR
) &EPIPHANY_F_SD6_MULTI_IFIELD
[0] } },
850 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
851 /* snmesh: mesh register */
852 { "snmesh", EPIPHANY_OPERAND_SNMESH
, HW_H_COREMESH_REGISTERS
, 12, 6,
853 { 2, { (const PTR
) &EPIPHANY_F_SN6_MULTI_IFIELD
[0] } },
854 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
855 /* simm3: signed 3-bit literal */
856 { "simm3", EPIPHANY_OPERAND_SIMM3
, HW_H_SINT
, 9, 3,
857 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SDISP3
] } },
858 { 0|A(RELAX
), { { { (1<<MACH_BASE
), 0 } } } } },
859 /* simm11: signed 11-bit literal */
860 { "simm11", EPIPHANY_OPERAND_SIMM11
, HW_H_SINT
, 9, 11,
861 { 2, { (const PTR
) &EPIPHANY_F_SDISP11_MULTI_IFIELD
[0] } },
862 { 0|A(RELAX
)|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
863 /* disp3: short data displacement */
864 { "disp3", EPIPHANY_OPERAND_DISP3
, HW_H_UINT
, 9, 3,
865 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_DISP3
] } },
866 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
867 /* trapnum6: parameter for swi or trap */
868 { "trapnum6", EPIPHANY_OPERAND_TRAPNUM6
, HW_H_UINT
, 15, 6,
869 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_TRAP_NUM
] } },
870 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
871 /* swi_num: unsigned 6-bit swi# */
872 { "swi_num", EPIPHANY_OPERAND_SWI_NUM
, HW_H_UINT
, 15, 6,
873 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_TRAP_NUM
] } },
874 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
875 /* disp11: sign-magnitude data displacement */
876 { "disp11", EPIPHANY_OPERAND_DISP11
, HW_H_UINT
, 9, 11,
877 { 2, { (const PTR
) &EPIPHANY_F_DISP11_MULTI_IFIELD
[0] } },
878 { 0|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
879 /* shift: immediate shift amount */
880 { "shift", EPIPHANY_OPERAND_SHIFT
, HW_H_UINT
, 9, 5,
881 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SHIFT
] } },
882 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
883 /* imm16: 16-bit unsigned literal */
884 { "imm16", EPIPHANY_OPERAND_IMM16
, HW_H_ADDR
, 12, 16,
885 { 2, { (const PTR
) &EPIPHANY_F_IMM16_MULTI_IFIELD
[0] } },
886 { 0|A(RELAX
)|A(VIRTUAL
), { { { (1<<MACH_BASE
), 0 } } } } },
887 /* imm8: 8-bit unsigned literal */
888 { "imm8", EPIPHANY_OPERAND_IMM8
, HW_H_ADDR
, 12, 8,
889 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_IMM8
] } },
890 { 0|A(RELAX
), { { { (1<<MACH_BASE
), 0 } } } } },
891 /* direction: +/- indexing */
892 { "direction", EPIPHANY_OPERAND_DIRECTION
, HW_H_UINT
, 20, 1,
893 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_ADDSUBX
] } },
894 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
895 /* dpmi: +/- magnitude immediate displacement */
896 { "dpmi", EPIPHANY_OPERAND_DPMI
, HW_H_UINT
, 24, 1,
897 { 0, { (const PTR
) &epiphany_cgen_ifld_table
[EPIPHANY_F_SUBD
] } },
898 { 0, { { { (1<<MACH_BASE
), 0 } } } } },
901 { 0, { (const PTR
) 0 } },
902 { 0, { { { (1<<MACH_BASE
), 0 } } } } }
908 /* The instruction table. */
910 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
911 #define A(a) (1 << CGEN_INSN_##a)
913 static const CGEN_IBASE epiphany_cgen_insn_table
[MAX_INSNS
] =
915 /* Special null first entry.
916 A `num' value of zero is thus invalid.
917 Also, the special `invalid' insn resides here. */
918 { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE
), 0 } } } } },
921 EPIPHANY_INSN_BEQ16
, "beq16", "beq.s", 16,
922 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
926 EPIPHANY_INSN_BEQ
, "beq", "beq.l", 32,
927 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
931 EPIPHANY_INSN_BNE16
, "bne16", "bne.s", 16,
932 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
936 EPIPHANY_INSN_BNE
, "bne", "bne.l", 32,
937 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
941 EPIPHANY_INSN_BGTU16
, "bgtu16", "bgtu.s", 16,
942 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
946 EPIPHANY_INSN_BGTU
, "bgtu", "bgtu.l", 32,
947 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
951 EPIPHANY_INSN_BGTEU16
, "bgteu16", "bgteu.s", 16,
952 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
954 /* bgteu.l $simm24 */
956 EPIPHANY_INSN_BGTEU
, "bgteu", "bgteu.l", 32,
957 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
961 EPIPHANY_INSN_BLTEU16
, "blteu16", "blteu.s", 16,
962 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
964 /* blteu.l $simm24 */
966 EPIPHANY_INSN_BLTEU
, "blteu", "blteu.l", 32,
967 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
971 EPIPHANY_INSN_BLTU16
, "bltu16", "bltu.s", 16,
972 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
976 EPIPHANY_INSN_BLTU
, "bltu", "bltu.l", 32,
977 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
981 EPIPHANY_INSN_BGT16
, "bgt16", "bgt.s", 16,
982 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
986 EPIPHANY_INSN_BGT
, "bgt", "bgt.l", 32,
987 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
991 EPIPHANY_INSN_BGTE16
, "bgte16", "bgte.s", 16,
992 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
996 EPIPHANY_INSN_BGTE
, "bgte", "bgte.l", 32,
997 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1001 EPIPHANY_INSN_BLT16
, "blt16", "blt.s", 16,
1002 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1006 EPIPHANY_INSN_BLT
, "blt", "blt.l", 32,
1007 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1011 EPIPHANY_INSN_BLTE16
, "blte16", "blte.s", 16,
1012 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1014 /* blte.l $simm24 */
1016 EPIPHANY_INSN_BLTE
, "blte", "blte.l", 32,
1017 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1021 EPIPHANY_INSN_BBEQ16
, "bbeq16", "bbeq.s", 16,
1022 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1024 /* bbeq.l $simm24 */
1026 EPIPHANY_INSN_BBEQ
, "bbeq", "bbeq.l", 32,
1027 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1031 EPIPHANY_INSN_BBNE16
, "bbne16", "bbne.s", 16,
1032 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1034 /* bbne.l $simm24 */
1036 EPIPHANY_INSN_BBNE
, "bbne", "bbne.l", 32,
1037 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1041 EPIPHANY_INSN_BBLT16
, "bblt16", "bblt.s", 16,
1042 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1044 /* bblt.l $simm24 */
1046 EPIPHANY_INSN_BBLT
, "bblt", "bblt.l", 32,
1047 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1049 /* bblte.s $simm8 */
1051 EPIPHANY_INSN_BBLTE16
, "bblte16", "bblte.s", 16,
1052 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1054 /* bblte.l $simm24 */
1056 EPIPHANY_INSN_BBLTE
, "bblte", "bblte.l", 32,
1057 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1061 EPIPHANY_INSN_B16
, "b16", "b.s", 16,
1062 { 0|A(SHORT_INSN
)|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1066 EPIPHANY_INSN_B
, "b", "b.l", 32,
1067 { 0|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1071 EPIPHANY_INSN_BL16
, "bl16", "bl.s", 16,
1072 { 0|A(SHORT_INSN
)|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1076 EPIPHANY_INSN_BL
, "bl", "bl.l", 32,
1077 { 0|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1081 EPIPHANY_INSN_JR16
, "jr16", "jr", 16,
1082 { 0|A(SHORT_INSN
)|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1086 -1, "rts", "rts", 32,
1087 { 0|A(UNCOND_CTI
)|A(ALIAS
), { { { (1<<MACH_BASE
), 0 } } } }
1091 EPIPHANY_INSN_JR
, "jr", "jr", 32,
1092 { 0|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1096 EPIPHANY_INSN_JALR16
, "jalr16", "jalr", 16,
1097 { 0|A(SHORT_INSN
)|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1101 EPIPHANY_INSN_JALR
, "jalr", "jalr", 32,
1102 { 0|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1104 /* ldrb $rd,[$rn,$rm] */
1106 EPIPHANY_INSN_LDRBX16_S
, "ldrbx16.s", "ldrb", 16,
1107 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1109 /* ldrb $rd,[$rn],$rm */
1111 EPIPHANY_INSN_LDRBP16_S
, "ldrbp16.s", "ldrb", 16,
1112 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1114 /* ldrb $rd6,[$rn6,$direction$rm6] */
1116 EPIPHANY_INSN_LDRBX_L
, "ldrbx.l", "ldrb", 32,
1117 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1119 /* ldrb $rd6,[$rn6],$direction$rm6 */
1121 EPIPHANY_INSN_LDRBP_L
, "ldrbp.l", "ldrb", 32,
1122 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1124 /* ldrb $rd,[$rn,$disp3] */
1126 EPIPHANY_INSN_LDRBD16_S
, "ldrbd16.s", "ldrb", 16,
1127 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1129 /* ldrb $rd6,[$rn6,$dpmi$disp11] */
1131 EPIPHANY_INSN_LDRBD_L
, "ldrbd.l", "ldrb", 32,
1132 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1134 /* ldrb $rd6,[$rn6],$dpmi$disp11 */
1136 EPIPHANY_INSN_LDRBDPM_L
, "ldrbdpm.l", "ldrb", 32,
1137 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1139 /* ldrh $rd,[$rn,$rm] */
1141 EPIPHANY_INSN_LDRHX16_S
, "ldrhx16.s", "ldrh", 16,
1142 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1144 /* ldrh $rd,[$rn],$rm */
1146 EPIPHANY_INSN_LDRHP16_S
, "ldrhp16.s", "ldrh", 16,
1147 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1149 /* ldrh $rd6,[$rn6,$direction$rm6] */
1151 EPIPHANY_INSN_LDRHX_L
, "ldrhx.l", "ldrh", 32,
1152 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1154 /* ldrh $rd6,[$rn6],$direction$rm6 */
1156 EPIPHANY_INSN_LDRHP_L
, "ldrhp.l", "ldrh", 32,
1157 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1159 /* ldrh $rd,[$rn,$disp3] */
1161 EPIPHANY_INSN_LDRHD16_S
, "ldrhd16.s", "ldrh", 16,
1162 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1164 /* ldrh $rd6,[$rn6,$dpmi$disp11] */
1166 EPIPHANY_INSN_LDRHD_L
, "ldrhd.l", "ldrh", 32,
1167 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1169 /* ldrh $rd6,[$rn6],$dpmi$disp11 */
1171 EPIPHANY_INSN_LDRHDPM_L
, "ldrhdpm.l", "ldrh", 32,
1172 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1174 /* ldr $rd,[$rn,$rm] */
1176 EPIPHANY_INSN_LDRX16_S
, "ldrx16.s", "ldr", 16,
1177 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1179 /* ldr $rd,[$rn],$rm */
1181 EPIPHANY_INSN_LDRP16_S
, "ldrp16.s", "ldr", 16,
1182 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1184 /* ldr $rd6,[$rn6,$direction$rm6] */
1186 EPIPHANY_INSN_LDRX_L
, "ldrx.l", "ldr", 32,
1187 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1189 /* ldr $rd6,[$rn6],$direction$rm6 */
1191 EPIPHANY_INSN_LDRP_L
, "ldrp.l", "ldr", 32,
1192 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1194 /* ldr $rd,[$rn,$disp3] */
1196 EPIPHANY_INSN_LDRD16_S
, "ldrd16.s", "ldr", 16,
1197 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1199 /* ldr $rd6,[$rn6,$dpmi$disp11] */
1201 EPIPHANY_INSN_LDRD_L
, "ldrd.l", "ldr", 32,
1202 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1204 /* ldr $rd6,[$rn6],$dpmi$disp11 */
1206 EPIPHANY_INSN_LDRDPM_L
, "ldrdpm.l", "ldr", 32,
1207 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1209 /* ldrd $rd,[$rn,$rm] */
1211 EPIPHANY_INSN_LDRDX16_S
, "ldrdx16.s", "ldrd", 16,
1212 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1214 /* ldrd $rd,[$rn],$rm */
1216 EPIPHANY_INSN_LDRDP16_S
, "ldrdp16.s", "ldrd", 16,
1217 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1219 /* ldrd $rd6,[$rn6,$direction$rm6] */
1221 EPIPHANY_INSN_LDRDX_L
, "ldrdx.l", "ldrd", 32,
1222 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1224 /* ldrd $rd6,[$rn6],$direction$rm6 */
1226 EPIPHANY_INSN_LDRDP_L
, "ldrdp.l", "ldrd", 32,
1227 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1229 /* ldrd $rd,[$rn,$disp3] */
1231 EPIPHANY_INSN_LDRDD16_S
, "ldrdd16.s", "ldrd", 16,
1232 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1234 /* ldrd $rd6,[$rn6,$dpmi$disp11] */
1236 EPIPHANY_INSN_LDRDD_L
, "ldrdd.l", "ldrd", 32,
1237 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1239 /* ldrd $rd6,[$rn6],$dpmi$disp11 */
1241 EPIPHANY_INSN_LDRDDPM_L
, "ldrddpm.l", "ldrd", 32,
1242 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1244 /* testsetb $rd6,[$rn6,$direction$rm6] */
1246 EPIPHANY_INSN_TESTSETBT
, "testsetbt", "testsetb", 32,
1247 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1249 /* testseth $rd6,[$rn6,$direction$rm6] */
1251 EPIPHANY_INSN_TESTSETHT
, "testsetht", "testseth", 32,
1252 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1254 /* testset $rd6,[$rn6,$direction$rm6] */
1256 EPIPHANY_INSN_TESTSETT
, "testsett", "testset", 32,
1257 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1259 /* strb $rd,[$rn,$rm] */
1261 EPIPHANY_INSN_STRBX16
, "strbx16", "strb", 16,
1262 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1264 /* strb $rd6,[$rn6,$direction$rm6] */
1266 EPIPHANY_INSN_STRBX
, "strbx", "strb", 32,
1267 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1269 /* strb $rd,[$rn],$rm */
1271 EPIPHANY_INSN_STRBP16
, "strbp16", "strb", 16,
1272 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1274 /* strb $rd6,[$rn6],$direction$rm6 */
1276 EPIPHANY_INSN_STRBP
, "strbp", "strb", 32,
1277 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1279 /* strb $rd,[$rn,$disp3] */
1281 EPIPHANY_INSN_STRBD16
, "strbd16", "strb", 16,
1282 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1284 /* strb $rd6,[$rn6,$dpmi$disp11] */
1286 EPIPHANY_INSN_STRBD
, "strbd", "strb", 32,
1287 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1289 /* strb $rd6,[$rn6],$dpmi$disp11 */
1291 EPIPHANY_INSN_STRBDPM
, "strbdpm", "strb", 32,
1292 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1294 /* strh $rd,[$rn,$rm] */
1296 EPIPHANY_INSN_STRHX16
, "strhx16", "strh", 16,
1297 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1299 /* strh $rd6,[$rn6,$direction$rm6] */
1301 EPIPHANY_INSN_STRHX
, "strhx", "strh", 32,
1302 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1304 /* strh $rd,[$rn],$rm */
1306 EPIPHANY_INSN_STRHP16
, "strhp16", "strh", 16,
1307 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1309 /* strh $rd6,[$rn6],$direction$rm6 */
1311 EPIPHANY_INSN_STRHP
, "strhp", "strh", 32,
1312 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1314 /* strh $rd,[$rn,$disp3] */
1316 EPIPHANY_INSN_STRHD16
, "strhd16", "strh", 16,
1317 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1319 /* strh $rd6,[$rn6,$dpmi$disp11] */
1321 EPIPHANY_INSN_STRHD
, "strhd", "strh", 32,
1322 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1324 /* strh $rd6,[$rn6],$dpmi$disp11 */
1326 EPIPHANY_INSN_STRHDPM
, "strhdpm", "strh", 32,
1327 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1329 /* str $rd,[$rn,$rm] */
1331 EPIPHANY_INSN_STRX16
, "strx16", "str", 16,
1332 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1334 /* str $rd6,[$rn6,$direction$rm6] */
1336 EPIPHANY_INSN_STRX
, "strx", "str", 32,
1337 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1339 /* str $rd,[$rn],$rm */
1341 EPIPHANY_INSN_STRP16
, "strp16", "str", 16,
1342 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1344 /* str $rd6,[$rn6],$direction$rm6 */
1346 EPIPHANY_INSN_STRP
, "strp", "str", 32,
1347 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1349 /* str $rd,[$rn,$disp3] */
1351 EPIPHANY_INSN_STRD16
, "strd16", "str", 16,
1352 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1354 /* str $rd6,[$rn6,$dpmi$disp11] */
1356 EPIPHANY_INSN_STRD
, "strd", "str", 32,
1357 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1359 /* str $rd6,[$rn6],$dpmi$disp11 */
1361 EPIPHANY_INSN_STRDPM
, "strdpm", "str", 32,
1362 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1364 /* strd $rd,[$rn,$rm] */
1366 EPIPHANY_INSN_STRDX16
, "strdx16", "strd", 16,
1367 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1369 /* strd $rd6,[$rn6,$direction$rm6] */
1371 EPIPHANY_INSN_STRDX
, "strdx", "strd", 32,
1372 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1374 /* strd $rd,[$rn],$rm */
1376 EPIPHANY_INSN_STRDP16
, "strdp16", "strd", 16,
1377 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1379 /* strd $rd6,[$rn6],$direction$rm6 */
1381 EPIPHANY_INSN_STRDP
, "strdp", "strd", 32,
1382 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1384 /* strd $rd,[$rn,$disp3] */
1386 EPIPHANY_INSN_STRDD16
, "strdd16", "strd", 16,
1387 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1389 /* strd $rd6,[$rn6,$dpmi$disp11] */
1391 EPIPHANY_INSN_STRDD
, "strdd", "strd", 32,
1392 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1394 /* strd $rd6,[$rn6],$dpmi$disp11 */
1396 EPIPHANY_INSN_STRDDPM
, "strddpm", "strd", 32,
1397 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1401 EPIPHANY_INSN_CMOV16EQ
, "cmov16EQ", "moveq", 16,
1402 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1404 /* moveq $rd6,$rn6 */
1406 EPIPHANY_INSN_CMOVEQ
, "cmovEQ", "moveq", 32,
1407 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1411 EPIPHANY_INSN_CMOV16NE
, "cmov16NE", "movne", 16,
1412 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1414 /* movne $rd6,$rn6 */
1416 EPIPHANY_INSN_CMOVNE
, "cmovNE", "movne", 32,
1417 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1419 /* movgtu $rd,$rn */
1421 EPIPHANY_INSN_CMOV16GTU
, "cmov16GTU", "movgtu", 16,
1422 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1424 /* movgtu $rd6,$rn6 */
1426 EPIPHANY_INSN_CMOVGTU
, "cmovGTU", "movgtu", 32,
1427 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1429 /* movgteu $rd,$rn */
1431 EPIPHANY_INSN_CMOV16GTEU
, "cmov16GTEU", "movgteu", 16,
1432 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1434 /* movgteu $rd6,$rn6 */
1436 EPIPHANY_INSN_CMOVGTEU
, "cmovGTEU", "movgteu", 32,
1437 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1439 /* movlteu $rd,$rn */
1441 EPIPHANY_INSN_CMOV16LTEU
, "cmov16LTEU", "movlteu", 16,
1442 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1444 /* movlteu $rd6,$rn6 */
1446 EPIPHANY_INSN_CMOVLTEU
, "cmovLTEU", "movlteu", 32,
1447 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1449 /* movltu $rd,$rn */
1451 EPIPHANY_INSN_CMOV16LTU
, "cmov16LTU", "movltu", 16,
1452 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1454 /* movltu $rd6,$rn6 */
1456 EPIPHANY_INSN_CMOVLTU
, "cmovLTU", "movltu", 32,
1457 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1461 EPIPHANY_INSN_CMOV16GT
, "cmov16GT", "movgt", 16,
1462 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1464 /* movgt $rd6,$rn6 */
1466 EPIPHANY_INSN_CMOVGT
, "cmovGT", "movgt", 32,
1467 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1469 /* movgte $rd,$rn */
1471 EPIPHANY_INSN_CMOV16GTE
, "cmov16GTE", "movgte", 16,
1472 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1474 /* movgte $rd6,$rn6 */
1476 EPIPHANY_INSN_CMOVGTE
, "cmovGTE", "movgte", 32,
1477 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1481 EPIPHANY_INSN_CMOV16LT
, "cmov16LT", "movlt", 16,
1482 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1484 /* movlt $rd6,$rn6 */
1486 EPIPHANY_INSN_CMOVLT
, "cmovLT", "movlt", 32,
1487 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1489 /* movlte $rd,$rn */
1491 EPIPHANY_INSN_CMOV16LTE
, "cmov16LTE", "movlte", 16,
1492 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1494 /* movlte $rd6,$rn6 */
1496 EPIPHANY_INSN_CMOVLTE
, "cmovLTE", "movlte", 32,
1497 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1501 EPIPHANY_INSN_CMOV16B
, "cmov16B", "mov", 16,
1502 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1506 EPIPHANY_INSN_CMOVB
, "cmovB", "mov", 32,
1507 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1509 /* movbeq $rd,$rn */
1511 EPIPHANY_INSN_CMOV16BEQ
, "cmov16BEQ", "movbeq", 16,
1512 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1514 /* movbeq $rd6,$rn6 */
1516 EPIPHANY_INSN_CMOVBEQ
, "cmovBEQ", "movbeq", 32,
1517 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1519 /* movbne $rd,$rn */
1521 EPIPHANY_INSN_CMOV16BNE
, "cmov16BNE", "movbne", 16,
1522 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1524 /* movbne $rd6,$rn6 */
1526 EPIPHANY_INSN_CMOVBNE
, "cmovBNE", "movbne", 32,
1527 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1529 /* movblt $rd,$rn */
1531 EPIPHANY_INSN_CMOV16BLT
, "cmov16BLT", "movblt", 16,
1532 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1534 /* movblt $rd6,$rn6 */
1536 EPIPHANY_INSN_CMOVBLT
, "cmovBLT", "movblt", 32,
1537 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1539 /* movblte $rd,$rn */
1541 EPIPHANY_INSN_CMOV16BLTE
, "cmov16BLTE", "movblte", 16,
1542 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1544 /* movblte $rd6,$rn6 */
1546 EPIPHANY_INSN_CMOVBLTE
, "cmovBLTE", "movblte", 32,
1547 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1551 EPIPHANY_INSN_MOVTS16
, "movts16", "movts", 16,
1552 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1554 /* movts $sn6,$rd6 */
1556 EPIPHANY_INSN_MOVTS6
, "movts6", "movts", 32,
1557 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1559 /* movts $sndma,$rd6 */
1561 EPIPHANY_INSN_MOVTSDMA
, "movtsdma", "movts", 32,
1562 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1564 /* movts $snmem,$rd6 */
1566 EPIPHANY_INSN_MOVTSMEM
, "movtsmem", "movts", 32,
1567 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1569 /* movts $snmesh,$rd6 */
1571 EPIPHANY_INSN_MOVTSMESH
, "movtsmesh", "movts", 32,
1572 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1576 EPIPHANY_INSN_MOVFS16
, "movfs16", "movfs", 16,
1577 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1579 /* movfs $rd6,$sn6 */
1581 EPIPHANY_INSN_MOVFS6
, "movfs6", "movfs", 32,
1582 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1584 /* movfs $rd6,$sndma */
1586 EPIPHANY_INSN_MOVFSDMA
, "movfsdma", "movfs", 32,
1587 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1589 /* movfs $rd6,$snmem */
1591 EPIPHANY_INSN_MOVFSMEM
, "movfsmem", "movfs", 32,
1592 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1594 /* movfs $rd6,$snmesh */
1596 EPIPHANY_INSN_MOVFSMESH
, "movfsmesh", "movfs", 32,
1597 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1601 EPIPHANY_INSN_NOP
, "nop", "nop", 16,
1602 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1606 EPIPHANY_INSN_SNOP
, "snop", "snop", 16,
1607 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1611 EPIPHANY_INSN_UNIMPL
, "unimpl", "unimpl", 32,
1612 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1616 EPIPHANY_INSN_IDLE
, "idle", "idle", 16,
1617 { 0, { { { (1<<MACH_BASE
), 0 } } } }
1621 EPIPHANY_INSN_BKPT
, "bkpt", "bkpt", 16,
1622 { 0|A(SHORT_INSN
)|A(UNCOND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1626 EPIPHANY_INSN_MBKPT
, "mbkpt", "mbkpt", 16,
1627 { 0|A(SHORT_INSN
), { { { (1<<MACH_BASE
), 0 } } } }
1631 EPIPHANY_INSN_RTI
, "rti", "rti", 16,
1632 { 0|A(UNCOND_CTI
)|A(SHORT_INSN
), { { { (1<<MACH_BASE
), 0 } } } }
1636 EPIPHANY_INSN_WAND
, "wand", "wand", 16,
1637 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1641 EPIPHANY_INSN_SYNC
, "sync", "sync", 16,
1642 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1646 EPIPHANY_INSN_GIEN
, "gien", "gie", 16,
1647 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1651 EPIPHANY_INSN_GIDIS
, "gidis", "gid", 16,
1652 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1656 EPIPHANY_INSN_SWI_NUM
, "swi_num", "swi", 16,
1657 { 0|A(UNCOND_CTI
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1661 -1, "swi", "swi", 16,
1662 { 0|A(UNCOND_CTI
)|A(SHORT_INSN
)|A(ALIAS
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1664 /* trap $trapnum6 */
1666 EPIPHANY_INSN_TRAP16
, "trap16", "trap", 16,
1667 { 0|A(UNCOND_CTI
)|A(SHORT_INSN
), { { { (1<<MACH_BASE
), 0 } } } }
1669 /* add $rd,$rn,$rm */
1671 EPIPHANY_INSN_ADD16
, "add16", "add", 16,
1672 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1674 /* add $rd6,$rn6,$rm6 */
1676 EPIPHANY_INSN_ADD
, "add", "add", 32,
1677 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1679 /* sub $rd,$rn,$rm */
1681 EPIPHANY_INSN_SUB16
, "sub16", "sub", 16,
1682 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1684 /* sub $rd6,$rn6,$rm6 */
1686 EPIPHANY_INSN_SUB
, "sub", "sub", 32,
1687 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1689 /* and $rd,$rn,$rm */
1691 EPIPHANY_INSN_AND16
, "and16", "and", 16,
1692 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1694 /* and $rd6,$rn6,$rm6 */
1696 EPIPHANY_INSN_AND
, "and", "and", 32,
1697 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1699 /* orr $rd,$rn,$rm */
1701 EPIPHANY_INSN_ORR16
, "orr16", "orr", 16,
1702 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1704 /* orr $rd6,$rn6,$rm6 */
1706 EPIPHANY_INSN_ORR
, "orr", "orr", 32,
1707 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1709 /* eor $rd,$rn,$rm */
1711 EPIPHANY_INSN_EOR16
, "eor16", "eor", 16,
1712 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1714 /* eor $rd6,$rn6,$rm6 */
1716 EPIPHANY_INSN_EOR
, "eor", "eor", 32,
1717 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1719 /* add.s $rd,$rn,$simm3 */
1721 EPIPHANY_INSN_ADDI16
, "addi16", "add.s", 16,
1722 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1724 /* add.l $rd6,$rn6,$simm11 */
1726 EPIPHANY_INSN_ADDI
, "addi", "add.l", 32,
1727 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1729 /* sub.s $rd,$rn,$simm3 */
1731 EPIPHANY_INSN_SUBI16
, "subi16", "sub.s", 16,
1732 { 0|A(IMM3
)|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1734 /* sub.l $rd6,$rn6,$simm11 */
1736 EPIPHANY_INSN_SUBI
, "subi", "sub.l", 32,
1737 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1739 /* asr $rd,$rn,$rm */
1741 EPIPHANY_INSN_ASR16
, "asr16", "asr", 16,
1742 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1744 /* asr $rd6,$rn6,$rm6 */
1746 EPIPHANY_INSN_ASR
, "asr", "asr", 32,
1747 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1749 /* lsr $rd,$rn,$rm */
1751 EPIPHANY_INSN_LSR16
, "lsr16", "lsr", 16,
1752 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1754 /* lsr $rd6,$rn6,$rm6 */
1756 EPIPHANY_INSN_LSR
, "lsr", "lsr", 32,
1757 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1759 /* lsl $rd,$rn,$rm */
1761 EPIPHANY_INSN_LSL16
, "lsl16", "lsl", 16,
1762 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1764 /* lsl $rd6,$rn6,$rm6 */
1766 EPIPHANY_INSN_LSL
, "lsl", "lsl", 32,
1767 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1769 /* lsr $rd,$rn,$shift */
1771 EPIPHANY_INSN_LSRI16
, "lsri16", "lsr", 16,
1772 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1774 /* lsr $rd6,$rn6,$shift */
1776 EPIPHANY_INSN_LSRI32
, "lsri32", "lsr", 32,
1777 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1779 /* lsl $rd,$rn,$shift */
1781 EPIPHANY_INSN_LSLI16
, "lsli16", "lsl", 16,
1782 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1784 /* lsl $rd6,$rn6,$shift */
1786 EPIPHANY_INSN_LSLI32
, "lsli32", "lsl", 32,
1787 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1789 /* asr $rd,$rn,$shift */
1791 EPIPHANY_INSN_ASRI16
, "asri16", "asr", 16,
1792 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1794 /* asr $rd6,$rn6,$shift */
1796 EPIPHANY_INSN_ASRI32
, "asri32", "asr", 32,
1797 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1801 EPIPHANY_INSN_BITR16
, "bitr16", "bitr", 16,
1802 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1804 /* bitr $rd6,$rn6 */
1806 EPIPHANY_INSN_BITR
, "bitr", "bitr", 32,
1807 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1809 /* fext $rd6,$rn6,$rm6 */
1811 EPIPHANY_INSN_FEXT
, "fext", "fext", 32,
1812 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1814 /* fdep $rd6,$rn6,$rm6 */
1816 EPIPHANY_INSN_FDEP
, "fdep", "fdep", 32,
1817 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1819 /* lfsr $rd6,$rn6,$rm6 */
1821 EPIPHANY_INSN_LFSR
, "lfsr", "lfsr", 32,
1822 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1824 /* mov.b $rd,$imm8 */
1826 EPIPHANY_INSN_MOV8
, "mov8", "mov.b", 16,
1827 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1829 /* mov.l $rd6,$imm16 */
1831 EPIPHANY_INSN_MOV16
, "mov16", "mov.l", 32,
1832 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1834 /* movt $rd6,$imm16 */
1836 EPIPHANY_INSN_MOVT
, "movt", "movt", 32,
1837 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1839 /* fadd $rd,$rn,$rm */
1841 EPIPHANY_INSN_F_ADDF16
, "f_addf16", "fadd", 16,
1842 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1844 /* fadd $rd6,$rn6,$rm6 */
1846 EPIPHANY_INSN_F_ADDF32
, "f_addf32", "fadd", 32,
1847 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1849 /* fsub $rd,$rn,$rm */
1851 EPIPHANY_INSN_F_SUBF16
, "f_subf16", "fsub", 16,
1852 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1854 /* fsub $rd6,$rn6,$rm6 */
1856 EPIPHANY_INSN_F_SUBF32
, "f_subf32", "fsub", 32,
1857 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1859 /* fmul $rd,$rn,$rm */
1861 EPIPHANY_INSN_F_MULF16
, "f_mulf16", "fmul", 16,
1862 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1864 /* fmul $rd6,$rn6,$rm6 */
1866 EPIPHANY_INSN_F_MULF32
, "f_mulf32", "fmul", 32,
1867 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1869 /* fmadd $rd,$rn,$rm */
1871 EPIPHANY_INSN_F_MADDF16
, "f_maddf16", "fmadd", 16,
1872 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1874 /* fmadd $rd6,$rn6,$rm6 */
1876 EPIPHANY_INSN_F_MADDF32
, "f_maddf32", "fmadd", 32,
1877 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1879 /* fmsub $rd,$rn,$rm */
1881 EPIPHANY_INSN_F_MSUBF16
, "f_msubf16", "fmsub", 16,
1882 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1884 /* fmsub $rd6,$rn6,$rm6 */
1886 EPIPHANY_INSN_F_MSUBF32
, "f_msubf32", "fmsub", 32,
1887 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1891 EPIPHANY_INSN_F_ABSF16
, "f_absf16", "fabs", 16,
1892 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1894 /* fabs $rd6,$rn6 */
1896 EPIPHANY_INSN_F_ABSF32
, "f_absf32", "fabs", 32,
1897 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1901 EPIPHANY_INSN_F_LOATF16
, "f_loatf16", "float", 16,
1902 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1904 /* float $rd6,$rn6 */
1906 EPIPHANY_INSN_F_LOATF32
, "f_loatf32", "float", 32,
1907 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1911 EPIPHANY_INSN_F_IXF16
, "f_ixf16", "fix", 16,
1912 { 0|A(SHORT_INSN
)|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1916 EPIPHANY_INSN_F_IXF32
, "f_ixf32", "fix", 32,
1917 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1919 /* frecip $frd6,$frn6 */
1921 EPIPHANY_INSN_F_RECIPF32
, "f_recipf32", "frecip", 32,
1922 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1924 /* fsqrt $frd6,$frn6 */
1926 EPIPHANY_INSN_F_SQRTF32
, "f_sqrtf32", "fsqrt", 32,
1927 { 0|A(COND_CTI
), { { { (1<<MACH_BASE
), 0 } } } }
1934 /* Initialize anything needed to be done once, before any cpu_open call. */
1941 static const CGEN_MACH
* lookup_mach_via_bfd_name (const CGEN_MACH
*, const char *);
1942 static void build_hw_table (CGEN_CPU_TABLE
*);
1943 static void build_ifield_table (CGEN_CPU_TABLE
*);
1944 static void build_operand_table (CGEN_CPU_TABLE
*);
1945 static void build_insn_table (CGEN_CPU_TABLE
*);
1946 static void epiphany_cgen_rebuild_tables (CGEN_CPU_TABLE
*);
1948 /* Subroutine of epiphany_cgen_cpu_open to look up a mach via its bfd name. */
1950 static const CGEN_MACH
*
1951 lookup_mach_via_bfd_name (const CGEN_MACH
*table
, const char *name
)
1955 if (strcmp (name
, table
->bfd_name
) == 0)
1962 /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
1965 build_hw_table (CGEN_CPU_TABLE
*cd
)
1968 int machs
= cd
->machs
;
1969 const CGEN_HW_ENTRY
*init
= & epiphany_cgen_hw_table
[0];
1970 /* MAX_HW is only an upper bound on the number of selected entries.
1971 However each entry is indexed by it's enum so there can be holes in
1973 const CGEN_HW_ENTRY
**selected
=
1974 (const CGEN_HW_ENTRY
**) xmalloc (MAX_HW
* sizeof (CGEN_HW_ENTRY
*));
1976 cd
->hw_table
.init_entries
= init
;
1977 cd
->hw_table
.entry_size
= sizeof (CGEN_HW_ENTRY
);
1978 memset (selected
, 0, MAX_HW
* sizeof (CGEN_HW_ENTRY
*));
1979 /* ??? For now we just use machs to determine which ones we want. */
1980 for (i
= 0; init
[i
].name
!= NULL
; ++i
)
1981 if (CGEN_HW_ATTR_VALUE (&init
[i
], CGEN_HW_MACH
)
1983 selected
[init
[i
].type
] = &init
[i
];
1984 cd
->hw_table
.entries
= selected
;
1985 cd
->hw_table
.num_entries
= MAX_HW
;
1988 /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
1991 build_ifield_table (CGEN_CPU_TABLE
*cd
)
1993 cd
->ifld_table
= & epiphany_cgen_ifld_table
[0];
1996 /* Subroutine of epiphany_cgen_cpu_open to build the hardware table. */
1999 build_operand_table (CGEN_CPU_TABLE
*cd
)
2002 int machs
= cd
->machs
;
2003 const CGEN_OPERAND
*init
= & epiphany_cgen_operand_table
[0];
2004 /* MAX_OPERANDS is only an upper bound on the number of selected entries.
2005 However each entry is indexed by it's enum so there can be holes in
2007 const CGEN_OPERAND
**selected
= xmalloc (MAX_OPERANDS
* sizeof (* selected
));
2009 cd
->operand_table
.init_entries
= init
;
2010 cd
->operand_table
.entry_size
= sizeof (CGEN_OPERAND
);
2011 memset (selected
, 0, MAX_OPERANDS
* sizeof (CGEN_OPERAND
*));
2012 /* ??? For now we just use mach to determine which ones we want. */
2013 for (i
= 0; init
[i
].name
!= NULL
; ++i
)
2014 if (CGEN_OPERAND_ATTR_VALUE (&init
[i
], CGEN_OPERAND_MACH
)
2016 selected
[init
[i
].type
] = &init
[i
];
2017 cd
->operand_table
.entries
= selected
;
2018 cd
->operand_table
.num_entries
= MAX_OPERANDS
;
2021 /* Subroutine of epiphany_cgen_cpu_open to build the hardware table.
2022 ??? This could leave out insns not supported by the specified mach/isa,
2023 but that would cause errors like "foo only supported by bar" to become
2024 "unknown insn", so for now we include all insns and require the app to
2025 do the checking later.
2026 ??? On the other hand, parsing of such insns may require their hardware or
2027 operand elements to be in the table [which they mightn't be]. */
2030 build_insn_table (CGEN_CPU_TABLE
*cd
)
2033 const CGEN_IBASE
*ib
= & epiphany_cgen_insn_table
[0];
2034 CGEN_INSN
*insns
= xmalloc (MAX_INSNS
* sizeof (CGEN_INSN
));
2036 memset (insns
, 0, MAX_INSNS
* sizeof (CGEN_INSN
));
2037 for (i
= 0; i
< MAX_INSNS
; ++i
)
2038 insns
[i
].base
= &ib
[i
];
2039 cd
->insn_table
.init_entries
= insns
;
2040 cd
->insn_table
.entry_size
= sizeof (CGEN_IBASE
);
2041 cd
->insn_table
.num_init_entries
= MAX_INSNS
;
2044 /* Subroutine of epiphany_cgen_cpu_open to rebuild the tables. */
2047 epiphany_cgen_rebuild_tables (CGEN_CPU_TABLE
*cd
)
2050 CGEN_BITSET
*isas
= cd
->isas
;
2051 unsigned int machs
= cd
->machs
;
2053 cd
->int_insn_p
= CGEN_INT_INSN_P
;
2055 /* Data derived from the isa spec. */
2056 #define UNSET (CGEN_SIZE_UNKNOWN + 1)
2057 cd
->default_insn_bitsize
= UNSET
;
2058 cd
->base_insn_bitsize
= UNSET
;
2059 cd
->min_insn_bitsize
= 65535; /* Some ridiculously big number. */
2060 cd
->max_insn_bitsize
= 0;
2061 for (i
= 0; i
< MAX_ISAS
; ++i
)
2062 if (cgen_bitset_contains (isas
, i
))
2064 const CGEN_ISA
*isa
= & epiphany_cgen_isa_table
[i
];
2066 /* Default insn sizes of all selected isas must be
2067 equal or we set the result to 0, meaning "unknown". */
2068 if (cd
->default_insn_bitsize
== UNSET
)
2069 cd
->default_insn_bitsize
= isa
->default_insn_bitsize
;
2070 else if (isa
->default_insn_bitsize
== cd
->default_insn_bitsize
)
2073 cd
->default_insn_bitsize
= CGEN_SIZE_UNKNOWN
;
2075 /* Base insn sizes of all selected isas must be equal
2076 or we set the result to 0, meaning "unknown". */
2077 if (cd
->base_insn_bitsize
== UNSET
)
2078 cd
->base_insn_bitsize
= isa
->base_insn_bitsize
;
2079 else if (isa
->base_insn_bitsize
== cd
->base_insn_bitsize
)
2082 cd
->base_insn_bitsize
= CGEN_SIZE_UNKNOWN
;
2084 /* Set min,max insn sizes. */
2085 if (isa
->min_insn_bitsize
< cd
->min_insn_bitsize
)
2086 cd
->min_insn_bitsize
= isa
->min_insn_bitsize
;
2087 if (isa
->max_insn_bitsize
> cd
->max_insn_bitsize
)
2088 cd
->max_insn_bitsize
= isa
->max_insn_bitsize
;
2091 /* Data derived from the mach spec. */
2092 for (i
= 0; i
< MAX_MACHS
; ++i
)
2093 if (((1 << i
) & machs
) != 0)
2095 const CGEN_MACH
*mach
= & epiphany_cgen_mach_table
[i
];
2097 if (mach
->insn_chunk_bitsize
!= 0)
2099 if (cd
->insn_chunk_bitsize
!= 0 && cd
->insn_chunk_bitsize
!= mach
->insn_chunk_bitsize
)
2101 fprintf (stderr
, "epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\n",
2102 cd
->insn_chunk_bitsize
, mach
->insn_chunk_bitsize
);
2106 cd
->insn_chunk_bitsize
= mach
->insn_chunk_bitsize
;
2110 /* Determine which hw elements are used by MACH. */
2111 build_hw_table (cd
);
2113 /* Build the ifield table. */
2114 build_ifield_table (cd
);
2116 /* Determine which operands are used by MACH/ISA. */
2117 build_operand_table (cd
);
2119 /* Build the instruction table. */
2120 build_insn_table (cd
);
2123 /* Initialize a cpu table and return a descriptor.
2124 It's much like opening a file, and must be the first function called.
2125 The arguments are a set of (type/value) pairs, terminated with
2128 Currently supported values:
2129 CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
2130 CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
2131 CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
2132 CGEN_CPU_OPEN_ENDIAN: specify endian choice
2133 CGEN_CPU_OPEN_END: terminates arguments
2135 ??? Simultaneous multiple isas might not make sense, but it's not (yet)
2139 epiphany_cgen_cpu_open (enum cgen_cpu_open_arg arg_type
, ...)
2141 CGEN_CPU_TABLE
*cd
= (CGEN_CPU_TABLE
*) xmalloc (sizeof (CGEN_CPU_TABLE
));
2143 CGEN_BITSET
*isas
= 0; /* 0 = "unspecified" */
2144 unsigned int machs
= 0; /* 0 = "unspecified" */
2145 enum cgen_endian endian
= CGEN_ENDIAN_UNKNOWN
;
2154 memset (cd
, 0, sizeof (*cd
));
2156 va_start (ap
, arg_type
);
2157 while (arg_type
!= CGEN_CPU_OPEN_END
)
2161 case CGEN_CPU_OPEN_ISAS
:
2162 isas
= va_arg (ap
, CGEN_BITSET
*);
2164 case CGEN_CPU_OPEN_MACHS
:
2165 machs
= va_arg (ap
, unsigned int);
2167 case CGEN_CPU_OPEN_BFDMACH
:
2169 const char *name
= va_arg (ap
, const char *);
2170 const CGEN_MACH
*mach
=
2171 lookup_mach_via_bfd_name (epiphany_cgen_mach_table
, name
);
2173 machs
|= 1 << mach
->num
;
2176 case CGEN_CPU_OPEN_ENDIAN
:
2177 endian
= va_arg (ap
, enum cgen_endian
);
2180 fprintf (stderr
, "epiphany_cgen_cpu_open: unsupported argument `%d'\n",
2182 abort (); /* ??? return NULL? */
2184 arg_type
= va_arg (ap
, enum cgen_cpu_open_arg
);
2188 /* Mach unspecified means "all". */
2190 machs
= (1 << MAX_MACHS
) - 1;
2191 /* Base mach is always selected. */
2193 if (endian
== CGEN_ENDIAN_UNKNOWN
)
2195 /* ??? If target has only one, could have a default. */
2196 fprintf (stderr
, "epiphany_cgen_cpu_open: no endianness specified\n");
2200 cd
->isas
= cgen_bitset_copy (isas
);
2202 cd
->endian
= endian
;
2203 /* FIXME: for the sparc case we can determine insn-endianness statically.
2204 The worry here is where both data and insn endian can be independently
2205 chosen, in which case this function will need another argument.
2206 Actually, will want to allow for more arguments in the future anyway. */
2207 cd
->insn_endian
= endian
;
2209 /* Table (re)builder. */
2210 cd
->rebuild_tables
= epiphany_cgen_rebuild_tables
;
2211 epiphany_cgen_rebuild_tables (cd
);
2213 /* Default to not allowing signed overflow. */
2214 cd
->signed_overflow_ok_p
= 0;
2216 return (CGEN_CPU_DESC
) cd
;
2219 /* Cover fn to epiphany_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
2220 MACH_NAME is the bfd name of the mach. */
2223 epiphany_cgen_cpu_open_1 (const char *mach_name
, enum cgen_endian endian
)
2225 return epiphany_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH
, mach_name
,
2226 CGEN_CPU_OPEN_ENDIAN
, endian
,
2230 /* Close a cpu table.
2231 ??? This can live in a machine independent file, but there's currently
2232 no place to put this file (there's no libcgen). libopcodes is the wrong
2233 place as some simulator ports use this but they don't use libopcodes. */
2236 epiphany_cgen_cpu_close (CGEN_CPU_DESC cd
)
2239 const CGEN_INSN
*insns
;
2241 if (cd
->macro_insn_table
.init_entries
)
2243 insns
= cd
->macro_insn_table
.init_entries
;
2244 for (i
= 0; i
< cd
->macro_insn_table
.num_init_entries
; ++i
, ++insns
)
2245 if (CGEN_INSN_RX ((insns
)))
2246 regfree (CGEN_INSN_RX (insns
));
2249 if (cd
->insn_table
.init_entries
)
2251 insns
= cd
->insn_table
.init_entries
;
2252 for (i
= 0; i
< cd
->insn_table
.num_init_entries
; ++i
, ++insns
)
2253 if (CGEN_INSN_RX (insns
))
2254 regfree (CGEN_INSN_RX (insns
));
2257 if (cd
->macro_insn_table
.init_entries
)
2258 free ((CGEN_INSN
*) cd
->macro_insn_table
.init_entries
);
2260 if (cd
->insn_table
.init_entries
)
2261 free ((CGEN_INSN
*) cd
->insn_table
.init_entries
);
2263 if (cd
->hw_table
.entries
)
2264 free ((CGEN_HW_ENTRY
*) cd
->hw_table
.entries
);
2266 if (cd
->operand_table
.entries
)
2267 free ((CGEN_HW_ENTRY
*) cd
->operand_table
.entries
);