Coverage Report

Created: 2025-06-24 06:45

/src/binutils-gdb/opcodes/epiphany-desc.c
Line
Count
Source (jump to first uncovered line)
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-2025 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
1939
init_tables (void)
1940
1
{
1941
1
}
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 *
1958
lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1959
3
{
1960
4
  while (table->name)
1961
3
    {
1962
3
      if (strcmp (name, table->bfd_name) == 0)
1963
2
  return table;
1964
1
      ++table;
1965
1
    }
1966
1
  return NULL;
1967
3
}
1968
1969
/* Subroutine of epiphany_cgen_cpu_open to build the hardware table.  */
1970
1971
static void
1972
build_hw_table (CGEN_CPU_TABLE *cd)
1973
3
{
1974
3
  int i;
1975
3
  int machs = cd->machs;
1976
3
  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
3
  const CGEN_HW_ENTRY **selected =
1981
3
    (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1982
1983
3
  cd->hw_table.init_entries = init;
1984
3
  cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1985
3
  memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1986
  /* ??? For now we just use machs to determine which ones we want.  */
1987
204
  for (i = 0; init[i].name != NULL; ++i)
1988
201
    if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1989
201
  & machs)
1990
201
      selected[init[i].type] = &init[i];
1991
3
  cd->hw_table.entries = selected;
1992
3
  cd->hw_table.num_entries = MAX_HW;
1993
3
}
1994
1995
/* Subroutine of epiphany_cgen_cpu_open to build the hardware table.  */
1996
1997
static void
1998
build_ifield_table (CGEN_CPU_TABLE *cd)
1999
3
{
2000
3
  cd->ifld_table = & epiphany_cgen_ifld_table[0];
2001
3
}
2002
2003
/* Subroutine of epiphany_cgen_cpu_open to build the hardware table.  */
2004
2005
static void
2006
build_operand_table (CGEN_CPU_TABLE *cd)
2007
3
{
2008
3
  int i;
2009
3
  int machs = cd->machs;
2010
3
  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
3
  const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
2015
2016
3
  cd->operand_table.init_entries = init;
2017
3
  cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
2018
3
  memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
2019
  /* ??? For now we just use mach to determine which ones we want.  */
2020
276
  for (i = 0; init[i].name != NULL; ++i)
2021
273
    if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
2022
273
  & machs)
2023
273
      selected[init[i].type] = &init[i];
2024
3
  cd->operand_table.entries = selected;
2025
3
  cd->operand_table.num_entries = MAX_OPERANDS;
2026
3
}
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
2037
build_insn_table (CGEN_CPU_TABLE *cd)
2038
3
{
2039
3
  int i;
2040
3
  const CGEN_IBASE *ib = & epiphany_cgen_insn_table[0];
2041
3
  CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
2042
2043
3
  memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
2044
612
  for (i = 0; i < MAX_INSNS; ++i)
2045
609
    insns[i].base = &ib[i];
2046
3
  cd->insn_table.init_entries = insns;
2047
3
  cd->insn_table.entry_size = sizeof (CGEN_IBASE);
2048
3
  cd->insn_table.num_init_entries = MAX_INSNS;
2049
3
}
2050
2051
/* Subroutine of epiphany_cgen_cpu_open to rebuild the tables.  */
2052
2053
static void
2054
epiphany_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
2055
3
{
2056
3
  int i;
2057
3
  CGEN_BITSET *isas = cd->isas;
2058
3
  unsigned int machs = cd->machs;
2059
2060
3
  cd->int_insn_p = CGEN_INT_INSN_P;
2061
2062
  /* Data derived from the isa spec.  */
2063
12
#define UNSET (CGEN_SIZE_UNKNOWN + 1)
2064
3
  cd->default_insn_bitsize = UNSET;
2065
3
  cd->base_insn_bitsize = UNSET;
2066
3
  cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
2067
3
  cd->max_insn_bitsize = 0;
2068
6
  for (i = 0; i < MAX_ISAS; ++i)
2069
3
    if (cgen_bitset_contains (isas, i))
2070
3
      {
2071
3
  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
3
  if (cd->default_insn_bitsize == UNSET)
2076
3
    cd->default_insn_bitsize = isa->default_insn_bitsize;
2077
0
  else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
2078
0
    ; /* This is ok.  */
2079
0
  else
2080
0
    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
3
  if (cd->base_insn_bitsize == UNSET)
2085
3
    cd->base_insn_bitsize = isa->base_insn_bitsize;
2086
0
  else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
2087
0
    ; /* This is ok.  */
2088
0
  else
2089
0
    cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
2090
2091
  /* Set min,max insn sizes.  */
2092
3
  if (isa->min_insn_bitsize < cd->min_insn_bitsize)
2093
3
    cd->min_insn_bitsize = isa->min_insn_bitsize;
2094
3
  if (isa->max_insn_bitsize > cd->max_insn_bitsize)
2095
3
    cd->max_insn_bitsize = isa->max_insn_bitsize;
2096
3
      }
2097
2098
  /* Data derived from the mach spec.  */
2099
9
  for (i = 0; i < MAX_MACHS; ++i)
2100
6
    if (((1 << i) & machs) != 0)
2101
6
      {
2102
6
  const CGEN_MACH *mach = & epiphany_cgen_mach_table[i];
2103
2104
6
  if (mach->insn_chunk_bitsize != 0)
2105
0
  {
2106
0
    if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
2107
0
      {
2108
0
        opcodes_error_handler
2109
0
    (/* xgettext:c-format */
2110
0
     _("internal error: epiphany_cgen_rebuild_tables: "
2111
0
       "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
2112
0
     cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
2113
0
        abort ();
2114
0
      }
2115
2116
0
    cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
2117
0
  }
2118
6
      }
2119
2120
  /* Determine which hw elements are used by MACH.  */
2121
3
  build_hw_table (cd);
2122
2123
  /* Build the ifield table.  */
2124
3
  build_ifield_table (cd);
2125
2126
  /* Determine which operands are used by MACH/ISA.  */
2127
3
  build_operand_table (cd);
2128
2129
  /* Build the instruction table.  */
2130
3
  build_insn_table (cd);
2131
3
}
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
2150
epiphany_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
2151
3
{
2152
3
  CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
2153
3
  static int init_p;
2154
3
  CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
2155
3
  unsigned int machs = 0; /* 0 = "unspecified" */
2156
3
  enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
2157
3
  enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
2158
3
  va_list ap;
2159
2160
3
  if (! init_p)
2161
1
    {
2162
1
      init_tables ();
2163
1
      init_p = 1;
2164
1
    }
2165
2166
3
  memset (cd, 0, sizeof (*cd));
2167
2168
3
  va_start (ap, arg_type);
2169
15
  while (arg_type != CGEN_CPU_OPEN_END)
2170
12
    {
2171
12
      switch (arg_type)
2172
12
  {
2173
3
  case CGEN_CPU_OPEN_ISAS :
2174
3
    isas = va_arg (ap, CGEN_BITSET *);
2175
3
    break;
2176
0
  case CGEN_CPU_OPEN_MACHS :
2177
0
    machs = va_arg (ap, unsigned int);
2178
0
    break;
2179
3
  case CGEN_CPU_OPEN_BFDMACH :
2180
3
    {
2181
3
      const char *name = va_arg (ap, const char *);
2182
3
      const CGEN_MACH *mach =
2183
3
        lookup_mach_via_bfd_name (epiphany_cgen_mach_table, name);
2184
2185
3
      if (mach != NULL)
2186
2
        machs |= 1 << mach->num;
2187
3
      break;
2188
0
    }
2189
3
  case CGEN_CPU_OPEN_ENDIAN :
2190
3
    endian = va_arg (ap, enum cgen_endian);
2191
3
    break;
2192
3
  case CGEN_CPU_OPEN_INSN_ENDIAN :
2193
3
    insn_endian = va_arg (ap, enum cgen_endian);
2194
3
    break;
2195
0
  default :
2196
0
    opcodes_error_handler
2197
0
      (/* xgettext:c-format */
2198
0
       _("internal error: epiphany_cgen_cpu_open: "
2199
0
         "unsupported argument `%d'"),
2200
0
       arg_type);
2201
0
    abort (); /* ??? return NULL? */
2202
12
  }
2203
12
      arg_type = va_arg (ap, enum cgen_cpu_open_arg);
2204
12
    }
2205
3
  va_end (ap);
2206
2207
  /* Mach unspecified means "all".  */
2208
3
  if (machs == 0)
2209
1
    machs = (1 << MAX_MACHS) - 1;
2210
  /* Base mach is always selected.  */
2211
3
  machs |= 1;
2212
3
  if (endian == CGEN_ENDIAN_UNKNOWN)
2213
0
    {
2214
      /* ??? If target has only one, could have a default.  */
2215
0
      opcodes_error_handler
2216
0
  (/* xgettext:c-format */
2217
0
   _("internal error: epiphany_cgen_cpu_open: no endianness specified"));
2218
0
      abort ();
2219
0
    }
2220
2221
3
  cd->isas = cgen_bitset_copy (isas);
2222
3
  cd->machs = machs;
2223
3
  cd->endian = endian;
2224
3
  cd->insn_endian
2225
3
    = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
2226
2227
  /* Table (re)builder.  */
2228
3
  cd->rebuild_tables = epiphany_cgen_rebuild_tables;
2229
3
  epiphany_cgen_rebuild_tables (cd);
2230
2231
  /* Default to not allowing signed overflow.  */
2232
3
  cd->signed_overflow_ok_p = 0;
2233
2234
3
  return (CGEN_CPU_DESC) cd;
2235
3
}
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
2241
epiphany_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
2242
0
{
2243
0
  return epiphany_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
2244
0
             CGEN_CPU_OPEN_ENDIAN, endian,
2245
0
             CGEN_CPU_OPEN_END);
2246
0
}
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
2254
epiphany_cgen_cpu_close (CGEN_CPU_DESC cd)
2255
0
{
2256
0
  unsigned int i;
2257
0
  const CGEN_INSN *insns;
2258
2259
0
  if (cd->macro_insn_table.init_entries)
2260
0
    {
2261
0
      insns = cd->macro_insn_table.init_entries;
2262
0
      for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
2263
0
  if (CGEN_INSN_RX ((insns)))
2264
0
    regfree (CGEN_INSN_RX (insns));
2265
0
    }
2266
2267
0
  if (cd->insn_table.init_entries)
2268
0
    {
2269
0
      insns = cd->insn_table.init_entries;
2270
0
      for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
2271
0
  if (CGEN_INSN_RX (insns))
2272
0
    regfree (CGEN_INSN_RX (insns));
2273
0
    }
2274
2275
0
  free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
2276
0
  free ((CGEN_INSN *) cd->insn_table.init_entries);
2277
0
  free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
2278
0
  free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
2279
0
  free (cd);
2280
0
}
2281