ubsan: wasm: shift is too large for 64-bit type 'bfd_vma'
[deliverable/binutils-gdb.git] / opcodes / xc16x-desc.c
CommitLineData
4162bb66 1/* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
d70c5fc7
NC
2/* CPU data for xc16x.
3
4THIS FILE IS MACHINE GENERATED WITH CGEN.
5
82704155 6Copyright (C) 1996-2019 Free Software Foundation, Inc.
d70c5fc7
NC
7
8This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9
9b201bb5
NC
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.
d70c5fc7 14
9b201bb5
NC
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.
d70c5fc7 19
9b201bb5
NC
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.
d70c5fc7
NC
23
24*/
25
26#include "sysdep.h"
27#include <stdio.h>
28#include <stdarg.h>
29#include "ansidecl.h"
30#include "bfd.h"
31#include "symcat.h"
32#include "xc16x-desc.h"
33#include "xc16x-opc.h"
34#include "opintl.h"
35#include "libiberty.h"
36#include "xregex.h"
37
38/* Attributes. */
39
40static const CGEN_ATTR_ENTRY bool_attr[] =
41{
42 { "#f", 0 },
43 { "#t", 1 },
44 { 0, 0 }
45};
46
47static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
48{
49 { "base", MACH_BASE },
50 { "xc16x", MACH_XC16X },
51 { "max", MACH_MAX },
52 { 0, 0 }
53};
54
55static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
56{
57 { "xc16x", ISA_XC16X },
58 { "max", ISA_MAX },
59 { 0, 0 }
60};
61
62static const CGEN_ATTR_ENTRY PIPE_attr[] ATTRIBUTE_UNUSED =
63{
64 { "NONE", PIPE_NONE },
65 { "OS", PIPE_OS },
66 { 0, 0 }
67};
68
69const CGEN_ATTR_TABLE xc16x_cgen_ifield_attr_table[] =
70{
71 { "MACH", & MACH_attr[0], & MACH_attr[0] },
72 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
73 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
74 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
75 { "RESERVED", &bool_attr[0], &bool_attr[0] },
76 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
77 { "SIGNED", &bool_attr[0], &bool_attr[0] },
78 { "RELOC", &bool_attr[0], &bool_attr[0] },
79 { 0, 0, 0 }
80};
81
82const CGEN_ATTR_TABLE xc16x_cgen_hardware_attr_table[] =
83{
84 { "MACH", & MACH_attr[0], & MACH_attr[0] },
85 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
86 { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
87 { "PC", &bool_attr[0], &bool_attr[0] },
88 { "PROFILE", &bool_attr[0], &bool_attr[0] },
89 { 0, 0, 0 }
90};
91
92const CGEN_ATTR_TABLE xc16x_cgen_operand_attr_table[] =
93{
94 { "MACH", & MACH_attr[0], & MACH_attr[0] },
95 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
96 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
97 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
98 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
99 { "SIGNED", &bool_attr[0], &bool_attr[0] },
100 { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
101 { "RELAX", &bool_attr[0], &bool_attr[0] },
102 { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
103 { "RELOC", &bool_attr[0], &bool_attr[0] },
104 { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] },
105 { "DOT-PREFIX", &bool_attr[0], &bool_attr[0] },
106 { "POF-PREFIX", &bool_attr[0], &bool_attr[0] },
107 { "PAG-PREFIX", &bool_attr[0], &bool_attr[0] },
108 { "SOF-PREFIX", &bool_attr[0], &bool_attr[0] },
109 { "SEG-PREFIX", &bool_attr[0], &bool_attr[0] },
110 { 0, 0, 0 }
111};
112
113const CGEN_ATTR_TABLE xc16x_cgen_insn_attr_table[] =
114{
115 { "MACH", & MACH_attr[0], & MACH_attr[0] },
116 { "PIPE", & PIPE_attr[0], & PIPE_attr[0] },
117 { "ALIAS", &bool_attr[0], &bool_attr[0] },
118 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
119 { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
120 { "COND-CTI", &bool_attr[0], &bool_attr[0] },
121 { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
122 { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
123 { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
124 { "RELAXED", &bool_attr[0], &bool_attr[0] },
125 { "NO-DIS", &bool_attr[0], &bool_attr[0] },
126 { "PBB", &bool_attr[0], &bool_attr[0] },
127 { 0, 0, 0 }
128};
129
130/* Instruction set variants. */
131
132static const CGEN_ISA xc16x_cgen_isa_table[] = {
133 { "xc16x", 16, 32, 16, 32 },
134 { 0, 0, 0, 0, 0 }
135};
136
137/* Machine variants. */
138
139static const CGEN_MACH xc16x_cgen_mach_table[] = {
140 { "xc16x", "xc16x", MACH_XC16X, 32 },
141 { 0, 0, 0, 0 }
142};
143
144static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_gr_names_entries[] =
145{
146 { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
147 { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
148 { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
149 { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
150 { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
151 { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
152 { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
153 { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
154 { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
155 { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
156 { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
157 { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
158 { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
159 { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
160 { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
161 { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }
162};
163
164CGEN_KEYWORD xc16x_cgen_opval_gr_names =
165{
166 & xc16x_cgen_opval_gr_names_entries[0],
167 16,
168 0, 0, 0, 0, ""
169};
170
171static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_ext_names_entries[] =
172{
173 { "0x1", 0, {0, {{{0, 0}}}}, 0, 0 },
174 { "0x2", 1, {0, {{{0, 0}}}}, 0, 0 },
175 { "0x3", 2, {0, {{{0, 0}}}}, 0, 0 },
176 { "0x4", 3, {0, {{{0, 0}}}}, 0, 0 },
177 { "1", 0, {0, {{{0, 0}}}}, 0, 0 },
178 { "2", 1, {0, {{{0, 0}}}}, 0, 0 },
179 { "3", 2, {0, {{{0, 0}}}}, 0, 0 },
180 { "4", 3, {0, {{{0, 0}}}}, 0, 0 }
181};
182
183CGEN_KEYWORD xc16x_cgen_opval_ext_names =
184{
185 & xc16x_cgen_opval_ext_names_entries[0],
186 8,
187 0, 0, 0, 0, ""
188};
189
190static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_psw_names_entries[] =
191{
192 { "IEN", 136, {0, {{{0, 0}}}}, 0, 0 },
193 { "r0.11", 240, {0, {{{0, 0}}}}, 0, 0 },
194 { "r1.11", 241, {0, {{{0, 0}}}}, 0, 0 },
195 { "r2.11", 242, {0, {{{0, 0}}}}, 0, 0 },
196 { "r3.11", 243, {0, {{{0, 0}}}}, 0, 0 },
197 { "r4.11", 244, {0, {{{0, 0}}}}, 0, 0 },
198 { "r5.11", 245, {0, {{{0, 0}}}}, 0, 0 },
199 { "r6.11", 246, {0, {{{0, 0}}}}, 0, 0 },
200 { "r7.11", 247, {0, {{{0, 0}}}}, 0, 0 },
201 { "r8.11", 248, {0, {{{0, 0}}}}, 0, 0 },
202 { "r9.11", 249, {0, {{{0, 0}}}}, 0, 0 },
203 { "r10.11", 250, {0, {{{0, 0}}}}, 0, 0 },
204 { "r11.11", 251, {0, {{{0, 0}}}}, 0, 0 },
205 { "r12.11", 252, {0, {{{0, 0}}}}, 0, 0 },
206 { "r13.11", 253, {0, {{{0, 0}}}}, 0, 0 },
207 { "r14.11", 254, {0, {{{0, 0}}}}, 0, 0 },
208 { "r15.11", 255, {0, {{{0, 0}}}}, 0, 0 }
209};
210
211CGEN_KEYWORD xc16x_cgen_opval_psw_names =
212{
213 & xc16x_cgen_opval_psw_names_entries[0],
214 17,
215 0, 0, 0, 0, ""
216};
217
218static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_grb_names_entries[] =
219{
220 { "rl0", 0, {0, {{{0, 0}}}}, 0, 0 },
221 { "rh0", 1, {0, {{{0, 0}}}}, 0, 0 },
222 { "rl1", 2, {0, {{{0, 0}}}}, 0, 0 },
223 { "rh1", 3, {0, {{{0, 0}}}}, 0, 0 },
224 { "rl2", 4, {0, {{{0, 0}}}}, 0, 0 },
225 { "rh2", 5, {0, {{{0, 0}}}}, 0, 0 },
226 { "rl3", 6, {0, {{{0, 0}}}}, 0, 0 },
227 { "rh3", 7, {0, {{{0, 0}}}}, 0, 0 },
228 { "rl4", 8, {0, {{{0, 0}}}}, 0, 0 },
229 { "rh4", 9, {0, {{{0, 0}}}}, 0, 0 },
230 { "rl5", 10, {0, {{{0, 0}}}}, 0, 0 },
231 { "rh5", 11, {0, {{{0, 0}}}}, 0, 0 },
232 { "rl6", 12, {0, {{{0, 0}}}}, 0, 0 },
233 { "rh6", 13, {0, {{{0, 0}}}}, 0, 0 },
234 { "rl7", 14, {0, {{{0, 0}}}}, 0, 0 },
235 { "rh7", 15, {0, {{{0, 0}}}}, 0, 0 }
236};
237
238CGEN_KEYWORD xc16x_cgen_opval_grb_names =
239{
240 & xc16x_cgen_opval_grb_names_entries[0],
241 16,
242 0, 0, 0, 0, ""
243};
244
245static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_conditioncode_names_entries[] =
246{
247 { "cc_UC", 0, {0, {{{0, 0}}}}, 0, 0 },
248 { "cc_NET", 1, {0, {{{0, 0}}}}, 0, 0 },
249 { "cc_Z", 2, {0, {{{0, 0}}}}, 0, 0 },
250 { "cc_EQ", 2, {0, {{{0, 0}}}}, 0, 0 },
251 { "cc_NZ", 3, {0, {{{0, 0}}}}, 0, 0 },
252 { "cc_NE", 3, {0, {{{0, 0}}}}, 0, 0 },
253 { "cc_V", 4, {0, {{{0, 0}}}}, 0, 0 },
254 { "cc_NV", 5, {0, {{{0, 0}}}}, 0, 0 },
255 { "cc_N", 6, {0, {{{0, 0}}}}, 0, 0 },
256 { "cc_NN", 7, {0, {{{0, 0}}}}, 0, 0 },
257 { "cc_ULT", 8, {0, {{{0, 0}}}}, 0, 0 },
258 { "cc_UGE", 9, {0, {{{0, 0}}}}, 0, 0 },
259 { "cc_C", 8, {0, {{{0, 0}}}}, 0, 0 },
260 { "cc_NC", 9, {0, {{{0, 0}}}}, 0, 0 },
261 { "cc_SGT", 10, {0, {{{0, 0}}}}, 0, 0 },
262 { "cc_SLE", 11, {0, {{{0, 0}}}}, 0, 0 },
263 { "cc_SLT", 12, {0, {{{0, 0}}}}, 0, 0 },
264 { "cc_SGE", 13, {0, {{{0, 0}}}}, 0, 0 },
265 { "cc_UGT", 14, {0, {{{0, 0}}}}, 0, 0 },
266 { "cc_ULE", 15, {0, {{{0, 0}}}}, 0, 0 }
267};
268
269CGEN_KEYWORD xc16x_cgen_opval_conditioncode_names =
270{
271 & xc16x_cgen_opval_conditioncode_names_entries[0],
272 20,
273 0, 0, 0, 0, ""
274};
275
276static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_extconditioncode_names_entries[] =
277{
278 { "cc_UC", 0, {0, {{{0, 0}}}}, 0, 0 },
279 { "cc_NET", 2, {0, {{{0, 0}}}}, 0, 0 },
280 { "cc_Z", 4, {0, {{{0, 0}}}}, 0, 0 },
281 { "cc_EQ", 4, {0, {{{0, 0}}}}, 0, 0 },
282 { "cc_NZ", 6, {0, {{{0, 0}}}}, 0, 0 },
283 { "cc_NE", 6, {0, {{{0, 0}}}}, 0, 0 },
284 { "cc_V", 8, {0, {{{0, 0}}}}, 0, 0 },
285 { "cc_NV", 10, {0, {{{0, 0}}}}, 0, 0 },
286 { "cc_N", 12, {0, {{{0, 0}}}}, 0, 0 },
287 { "cc_NN", 14, {0, {{{0, 0}}}}, 0, 0 },
288 { "cc_ULT", 16, {0, {{{0, 0}}}}, 0, 0 },
289 { "cc_UGE", 18, {0, {{{0, 0}}}}, 0, 0 },
290 { "cc_C", 16, {0, {{{0, 0}}}}, 0, 0 },
291 { "cc_NC", 18, {0, {{{0, 0}}}}, 0, 0 },
292 { "cc_SGT", 20, {0, {{{0, 0}}}}, 0, 0 },
293 { "cc_SLE", 22, {0, {{{0, 0}}}}, 0, 0 },
294 { "cc_SLT", 24, {0, {{{0, 0}}}}, 0, 0 },
295 { "cc_SGE", 26, {0, {{{0, 0}}}}, 0, 0 },
296 { "cc_UGT", 28, {0, {{{0, 0}}}}, 0, 0 },
297 { "cc_ULE", 30, {0, {{{0, 0}}}}, 0, 0 },
298 { "cc_nusr0", 1, {0, {{{0, 0}}}}, 0, 0 },
299 { "cc_nusr1", 3, {0, {{{0, 0}}}}, 0, 0 },
300 { "cc_usr0", 5, {0, {{{0, 0}}}}, 0, 0 },
301 { "cc_usr1", 7, {0, {{{0, 0}}}}, 0, 0 }
302};
303
304CGEN_KEYWORD xc16x_cgen_opval_extconditioncode_names =
305{
306 & xc16x_cgen_opval_extconditioncode_names_entries[0],
307 24,
308 0, 0, 0, 0, ""
309};
310
311static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_grb8_names_entries[] =
312{
313 { "dpp0", 0, {0, {{{0, 0}}}}, 0, 0 },
314 { "dpp1", 1, {0, {{{0, 0}}}}, 0, 0 },
315 { "dpp2", 2, {0, {{{0, 0}}}}, 0, 0 },
316 { "dpp3", 3, {0, {{{0, 0}}}}, 0, 0 },
317 { "psw", 136, {0, {{{0, 0}}}}, 0, 0 },
318 { "cp", 8, {0, {{{0, 0}}}}, 0, 0 },
319 { "mdl", 7, {0, {{{0, 0}}}}, 0, 0 },
320 { "mdh", 6, {0, {{{0, 0}}}}, 0, 0 },
321 { "mdc", 135, {0, {{{0, 0}}}}, 0, 0 },
322 { "sp", 9, {0, {{{0, 0}}}}, 0, 0 },
323 { "csp", 4, {0, {{{0, 0}}}}, 0, 0 },
324 { "vecseg", 137, {0, {{{0, 0}}}}, 0, 0 },
325 { "stkov", 10, {0, {{{0, 0}}}}, 0, 0 },
326 { "stkun", 11, {0, {{{0, 0}}}}, 0, 0 },
327 { "cpucon1", 12, {0, {{{0, 0}}}}, 0, 0 },
328 { "cpucon2", 13, {0, {{{0, 0}}}}, 0, 0 },
329 { "zeros", 142, {0, {{{0, 0}}}}, 0, 0 },
330 { "ones", 143, {0, {{{0, 0}}}}, 0, 0 },
331 { "spseg", 134, {0, {{{0, 0}}}}, 0, 0 },
332 { "tfr", 214, {0, {{{0, 0}}}}, 0, 0 },
333 { "rl0", 240, {0, {{{0, 0}}}}, 0, 0 },
334 { "rh0", 241, {0, {{{0, 0}}}}, 0, 0 },
335 { "rl1", 242, {0, {{{0, 0}}}}, 0, 0 },
336 { "rh1", 243, {0, {{{0, 0}}}}, 0, 0 },
337 { "rl2", 244, {0, {{{0, 0}}}}, 0, 0 },
338 { "rh2", 245, {0, {{{0, 0}}}}, 0, 0 },
339 { "rl3", 246, {0, {{{0, 0}}}}, 0, 0 },
340 { "rh3", 247, {0, {{{0, 0}}}}, 0, 0 },
341 { "rl4", 248, {0, {{{0, 0}}}}, 0, 0 },
342 { "rh4", 249, {0, {{{0, 0}}}}, 0, 0 },
343 { "rl5", 250, {0, {{{0, 0}}}}, 0, 0 },
344 { "rh5", 251, {0, {{{0, 0}}}}, 0, 0 },
345 { "rl6", 252, {0, {{{0, 0}}}}, 0, 0 },
346 { "rh6", 253, {0, {{{0, 0}}}}, 0, 0 },
347 { "rl7", 254, {0, {{{0, 0}}}}, 0, 0 },
348 { "rh7", 255, {0, {{{0, 0}}}}, 0, 0 }
349};
350
351CGEN_KEYWORD xc16x_cgen_opval_grb8_names =
352{
353 & xc16x_cgen_opval_grb8_names_entries[0],
354 36,
355 0, 0, 0, 0, ""
356};
357
358static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_r8_names_entries[] =
359{
360 { "dpp0", 0, {0, {{{0, 0}}}}, 0, 0 },
361 { "dpp1", 1, {0, {{{0, 0}}}}, 0, 0 },
362 { "dpp2", 2, {0, {{{0, 0}}}}, 0, 0 },
363 { "dpp3", 3, {0, {{{0, 0}}}}, 0, 0 },
364 { "psw", 136, {0, {{{0, 0}}}}, 0, 0 },
365 { "cp", 8, {0, {{{0, 0}}}}, 0, 0 },
366 { "mdl", 7, {0, {{{0, 0}}}}, 0, 0 },
367 { "mdh", 6, {0, {{{0, 0}}}}, 0, 0 },
368 { "mdc", 135, {0, {{{0, 0}}}}, 0, 0 },
369 { "sp", 9, {0, {{{0, 0}}}}, 0, 0 },
370 { "csp", 4, {0, {{{0, 0}}}}, 0, 0 },
371 { "vecseg", 137, {0, {{{0, 0}}}}, 0, 0 },
372 { "stkov", 10, {0, {{{0, 0}}}}, 0, 0 },
373 { "stkun", 11, {0, {{{0, 0}}}}, 0, 0 },
374 { "cpucon1", 12, {0, {{{0, 0}}}}, 0, 0 },
375 { "cpucon2", 13, {0, {{{0, 0}}}}, 0, 0 },
376 { "zeros", 142, {0, {{{0, 0}}}}, 0, 0 },
377 { "ones", 143, {0, {{{0, 0}}}}, 0, 0 },
378 { "spseg", 134, {0, {{{0, 0}}}}, 0, 0 },
379 { "tfr", 214, {0, {{{0, 0}}}}, 0, 0 },
380 { "r0", 240, {0, {{{0, 0}}}}, 0, 0 },
381 { "r1", 241, {0, {{{0, 0}}}}, 0, 0 },
382 { "r2", 242, {0, {{{0, 0}}}}, 0, 0 },
383 { "r3", 243, {0, {{{0, 0}}}}, 0, 0 },
384 { "r4", 244, {0, {{{0, 0}}}}, 0, 0 },
385 { "r5", 245, {0, {{{0, 0}}}}, 0, 0 },
386 { "r6", 246, {0, {{{0, 0}}}}, 0, 0 },
387 { "r7", 247, {0, {{{0, 0}}}}, 0, 0 },
388 { "r8", 248, {0, {{{0, 0}}}}, 0, 0 },
389 { "r9", 249, {0, {{{0, 0}}}}, 0, 0 },
390 { "r10", 250, {0, {{{0, 0}}}}, 0, 0 },
391 { "r11", 251, {0, {{{0, 0}}}}, 0, 0 },
392 { "r12", 252, {0, {{{0, 0}}}}, 0, 0 },
393 { "r13", 253, {0, {{{0, 0}}}}, 0, 0 },
394 { "r14", 254, {0, {{{0, 0}}}}, 0, 0 },
395 { "r15", 255, {0, {{{0, 0}}}}, 0, 0 }
396};
397
398CGEN_KEYWORD xc16x_cgen_opval_r8_names =
399{
400 & xc16x_cgen_opval_r8_names_entries[0],
401 36,
402 0, 0, 0, 0, ""
403};
404
405static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_regmem8_names_entries[] =
406{
407 { "dpp0", 0, {0, {{{0, 0}}}}, 0, 0 },
408 { "dpp1", 1, {0, {{{0, 0}}}}, 0, 0 },
409 { "dpp2", 2, {0, {{{0, 0}}}}, 0, 0 },
410 { "dpp3", 3, {0, {{{0, 0}}}}, 0, 0 },
411 { "psw", 136, {0, {{{0, 0}}}}, 0, 0 },
412 { "cp", 8, {0, {{{0, 0}}}}, 0, 0 },
413 { "mdl", 7, {0, {{{0, 0}}}}, 0, 0 },
414 { "mdh", 6, {0, {{{0, 0}}}}, 0, 0 },
415 { "mdc", 135, {0, {{{0, 0}}}}, 0, 0 },
416 { "sp", 9, {0, {{{0, 0}}}}, 0, 0 },
417 { "csp", 4, {0, {{{0, 0}}}}, 0, 0 },
418 { "vecseg", 137, {0, {{{0, 0}}}}, 0, 0 },
419 { "stkov", 10, {0, {{{0, 0}}}}, 0, 0 },
420 { "stkun", 11, {0, {{{0, 0}}}}, 0, 0 },
421 { "cpucon1", 12, {0, {{{0, 0}}}}, 0, 0 },
422 { "cpucon2", 13, {0, {{{0, 0}}}}, 0, 0 },
423 { "zeros", 142, {0, {{{0, 0}}}}, 0, 0 },
424 { "ones", 143, {0, {{{0, 0}}}}, 0, 0 },
425 { "spseg", 134, {0, {{{0, 0}}}}, 0, 0 },
426 { "tfr", 214, {0, {{{0, 0}}}}, 0, 0 },
427 { "r0", 240, {0, {{{0, 0}}}}, 0, 0 },
428 { "r1", 241, {0, {{{0, 0}}}}, 0, 0 },
429 { "r2", 242, {0, {{{0, 0}}}}, 0, 0 },
430 { "r3", 243, {0, {{{0, 0}}}}, 0, 0 },
431 { "r4", 244, {0, {{{0, 0}}}}, 0, 0 },
432 { "r5", 245, {0, {{{0, 0}}}}, 0, 0 },
433 { "r6", 246, {0, {{{0, 0}}}}, 0, 0 },
434 { "r7", 247, {0, {{{0, 0}}}}, 0, 0 },
435 { "r8", 248, {0, {{{0, 0}}}}, 0, 0 },
436 { "r9", 249, {0, {{{0, 0}}}}, 0, 0 },
437 { "r10", 250, {0, {{{0, 0}}}}, 0, 0 },
438 { "r11", 251, {0, {{{0, 0}}}}, 0, 0 },
439 { "r12", 252, {0, {{{0, 0}}}}, 0, 0 },
440 { "r13", 253, {0, {{{0, 0}}}}, 0, 0 },
441 { "r14", 254, {0, {{{0, 0}}}}, 0, 0 },
442 { "r15", 255, {0, {{{0, 0}}}}, 0, 0 }
443};
444
445CGEN_KEYWORD xc16x_cgen_opval_regmem8_names =
446{
447 & xc16x_cgen_opval_regmem8_names_entries[0],
448 36,
449 0, 0, 0, 0, ""
450};
451
452static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_regdiv8_names_entries[] =
453{
454 { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
455 { "r1", 17, {0, {{{0, 0}}}}, 0, 0 },
456 { "r2", 34, {0, {{{0, 0}}}}, 0, 0 },
457 { "r3", 51, {0, {{{0, 0}}}}, 0, 0 },
458 { "r4", 68, {0, {{{0, 0}}}}, 0, 0 },
459 { "r5", 85, {0, {{{0, 0}}}}, 0, 0 },
460 { "r6", 102, {0, {{{0, 0}}}}, 0, 0 },
461 { "r7", 119, {0, {{{0, 0}}}}, 0, 0 },
462 { "r8", 136, {0, {{{0, 0}}}}, 0, 0 },
463 { "r9", 153, {0, {{{0, 0}}}}, 0, 0 },
464 { "r10", 170, {0, {{{0, 0}}}}, 0, 0 },
465 { "r11", 187, {0, {{{0, 0}}}}, 0, 0 },
466 { "r12", 204, {0, {{{0, 0}}}}, 0, 0 },
467 { "r13", 221, {0, {{{0, 0}}}}, 0, 0 },
468 { "r14", 238, {0, {{{0, 0}}}}, 0, 0 },
469 { "r15", 255, {0, {{{0, 0}}}}, 0, 0 }
470};
471
472CGEN_KEYWORD xc16x_cgen_opval_regdiv8_names =
473{
474 & xc16x_cgen_opval_regdiv8_names_entries[0],
475 16,
476 0, 0, 0, 0, ""
477};
478
479static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_reg0_name_entries[] =
480{
481 { "0x1", 1, {0, {{{0, 0}}}}, 0, 0 },
482 { "0x2", 2, {0, {{{0, 0}}}}, 0, 0 },
483 { "0x3", 3, {0, {{{0, 0}}}}, 0, 0 },
484 { "0x4", 4, {0, {{{0, 0}}}}, 0, 0 },
485 { "0x5", 5, {0, {{{0, 0}}}}, 0, 0 },
486 { "0x6", 6, {0, {{{0, 0}}}}, 0, 0 },
487 { "0x7", 7, {0, {{{0, 0}}}}, 0, 0 },
488 { "0x8", 8, {0, {{{0, 0}}}}, 0, 0 },
489 { "0x9", 9, {0, {{{0, 0}}}}, 0, 0 },
490 { "0xa", 10, {0, {{{0, 0}}}}, 0, 0 },
491 { "0xb", 11, {0, {{{0, 0}}}}, 0, 0 },
492 { "0xc", 12, {0, {{{0, 0}}}}, 0, 0 },
493 { "0xd", 13, {0, {{{0, 0}}}}, 0, 0 },
494 { "0xe", 14, {0, {{{0, 0}}}}, 0, 0 },
495 { "0xf", 15, {0, {{{0, 0}}}}, 0, 0 },
496 { "1", 1, {0, {{{0, 0}}}}, 0, 0 },
497 { "2", 2, {0, {{{0, 0}}}}, 0, 0 },
498 { "3", 3, {0, {{{0, 0}}}}, 0, 0 },
499 { "4", 4, {0, {{{0, 0}}}}, 0, 0 },
500 { "5", 5, {0, {{{0, 0}}}}, 0, 0 },
501 { "6", 6, {0, {{{0, 0}}}}, 0, 0 },
502 { "7", 7, {0, {{{0, 0}}}}, 0, 0 },
503 { "8", 8, {0, {{{0, 0}}}}, 0, 0 },
504 { "9", 9, {0, {{{0, 0}}}}, 0, 0 },
505 { "10", 10, {0, {{{0, 0}}}}, 0, 0 },
506 { "11", 11, {0, {{{0, 0}}}}, 0, 0 },
507 { "12", 12, {0, {{{0, 0}}}}, 0, 0 },
508 { "13", 13, {0, {{{0, 0}}}}, 0, 0 },
509 { "14", 14, {0, {{{0, 0}}}}, 0, 0 },
510 { "15", 15, {0, {{{0, 0}}}}, 0, 0 }
511};
512
513CGEN_KEYWORD xc16x_cgen_opval_reg0_name =
514{
515 & xc16x_cgen_opval_reg0_name_entries[0],
516 30,
517 0, 0, 0, 0, ""
518};
519
520static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_reg0_name1_entries[] =
521{
522 { "0x1", 1, {0, {{{0, 0}}}}, 0, 0 },
523 { "0x2", 2, {0, {{{0, 0}}}}, 0, 0 },
524 { "0x3", 3, {0, {{{0, 0}}}}, 0, 0 },
525 { "0x4", 4, {0, {{{0, 0}}}}, 0, 0 },
526 { "0x5", 5, {0, {{{0, 0}}}}, 0, 0 },
527 { "0x6", 6, {0, {{{0, 0}}}}, 0, 0 },
528 { "0x7", 7, {0, {{{0, 0}}}}, 0, 0 },
529 { "1", 1, {0, {{{0, 0}}}}, 0, 0 },
530 { "2", 2, {0, {{{0, 0}}}}, 0, 0 },
531 { "3", 3, {0, {{{0, 0}}}}, 0, 0 },
532 { "4", 4, {0, {{{0, 0}}}}, 0, 0 },
533 { "5", 5, {0, {{{0, 0}}}}, 0, 0 },
534 { "6", 6, {0, {{{0, 0}}}}, 0, 0 },
535 { "7", 7, {0, {{{0, 0}}}}, 0, 0 }
536};
537
538CGEN_KEYWORD xc16x_cgen_opval_reg0_name1 =
539{
540 & xc16x_cgen_opval_reg0_name1_entries[0],
541 14,
542 0, 0, 0, 0, ""
543};
544
545static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_regbmem8_names_entries[] =
546{
547 { "dpp0", 0, {0, {{{0, 0}}}}, 0, 0 },
548 { "dpp1", 1, {0, {{{0, 0}}}}, 0, 0 },
549 { "dpp2", 2, {0, {{{0, 0}}}}, 0, 0 },
550 { "dpp3", 3, {0, {{{0, 0}}}}, 0, 0 },
551 { "psw", 136, {0, {{{0, 0}}}}, 0, 0 },
552 { "cp", 8, {0, {{{0, 0}}}}, 0, 0 },
553 { "mdl", 7, {0, {{{0, 0}}}}, 0, 0 },
554 { "mdh", 6, {0, {{{0, 0}}}}, 0, 0 },
555 { "mdc", 135, {0, {{{0, 0}}}}, 0, 0 },
556 { "sp", 9, {0, {{{0, 0}}}}, 0, 0 },
557 { "csp", 4, {0, {{{0, 0}}}}, 0, 0 },
558 { "vecseg", 137, {0, {{{0, 0}}}}, 0, 0 },
559 { "stkov", 10, {0, {{{0, 0}}}}, 0, 0 },
560 { "stkun", 11, {0, {{{0, 0}}}}, 0, 0 },
561 { "cpucon1", 12, {0, {{{0, 0}}}}, 0, 0 },
562 { "cpucon2", 13, {0, {{{0, 0}}}}, 0, 0 },
563 { "zeros", 142, {0, {{{0, 0}}}}, 0, 0 },
564 { "ones", 143, {0, {{{0, 0}}}}, 0, 0 },
565 { "spseg", 134, {0, {{{0, 0}}}}, 0, 0 },
566 { "tfr", 214, {0, {{{0, 0}}}}, 0, 0 },
567 { "rl0", 240, {0, {{{0, 0}}}}, 0, 0 },
568 { "rh0", 241, {0, {{{0, 0}}}}, 0, 0 },
569 { "rl1", 242, {0, {{{0, 0}}}}, 0, 0 },
570 { "rh1", 243, {0, {{{0, 0}}}}, 0, 0 },
571 { "rl2", 244, {0, {{{0, 0}}}}, 0, 0 },
572 { "rh2", 245, {0, {{{0, 0}}}}, 0, 0 },
573 { "rl3", 246, {0, {{{0, 0}}}}, 0, 0 },
574 { "rh3", 247, {0, {{{0, 0}}}}, 0, 0 },
575 { "rl4", 248, {0, {{{0, 0}}}}, 0, 0 },
576 { "rh4", 249, {0, {{{0, 0}}}}, 0, 0 },
577 { "rl5", 250, {0, {{{0, 0}}}}, 0, 0 },
578 { "rh5", 251, {0, {{{0, 0}}}}, 0, 0 },
579 { "rl6", 252, {0, {{{0, 0}}}}, 0, 0 },
580 { "rh6", 253, {0, {{{0, 0}}}}, 0, 0 },
581 { "rl7", 254, {0, {{{0, 0}}}}, 0, 0 },
582 { "rh7", 255, {0, {{{0, 0}}}}, 0, 0 }
583};
584
585CGEN_KEYWORD xc16x_cgen_opval_regbmem8_names =
586{
587 & xc16x_cgen_opval_regbmem8_names_entries[0],
588 36,
589 0, 0, 0, 0, ""
590};
591
592static CGEN_KEYWORD_ENTRY xc16x_cgen_opval_memgr8_names_entries[] =
593{
594 { "dpp0", 65024, {0, {{{0, 0}}}}, 0, 0 },
595 { "dpp1", 65026, {0, {{{0, 0}}}}, 0, 0 },
596 { "dpp2", 65028, {0, {{{0, 0}}}}, 0, 0 },
597 { "dpp3", 65030, {0, {{{0, 0}}}}, 0, 0 },
598 { "psw", 65296, {0, {{{0, 0}}}}, 0, 0 },
599 { "cp", 65040, {0, {{{0, 0}}}}, 0, 0 },
600 { "mdl", 65038, {0, {{{0, 0}}}}, 0, 0 },
601 { "mdh", 65036, {0, {{{0, 0}}}}, 0, 0 },
602 { "mdc", 65294, {0, {{{0, 0}}}}, 0, 0 },
603 { "sp", 65042, {0, {{{0, 0}}}}, 0, 0 },
604 { "csp", 65032, {0, {{{0, 0}}}}, 0, 0 },
605 { "vecseg", 65298, {0, {{{0, 0}}}}, 0, 0 },
606 { "stkov", 65044, {0, {{{0, 0}}}}, 0, 0 },
607 { "stkun", 65046, {0, {{{0, 0}}}}, 0, 0 },
608 { "cpucon1", 65048, {0, {{{0, 0}}}}, 0, 0 },
609 { "cpucon2", 65050, {0, {{{0, 0}}}}, 0, 0 },
610 { "zeros", 65308, {0, {{{0, 0}}}}, 0, 0 },
611 { "ones", 65310, {0, {{{0, 0}}}}, 0, 0 },
612 { "spseg", 65292, {0, {{{0, 0}}}}, 0, 0 },
613 { "tfr", 65452, {0, {{{0, 0}}}}, 0, 0 }
614};
615
616CGEN_KEYWORD xc16x_cgen_opval_memgr8_names =
617{
618 & xc16x_cgen_opval_memgr8_names_entries[0],
619 20,
620 0, 0, 0, 0, ""
621};
622
623
624/* The hardware table. */
625
d70c5fc7 626#define A(a) (1 << CGEN_HW_##a)
d70c5fc7
NC
627
628const CGEN_HW_ENTRY xc16x_cgen_hw_table[] =
629{
630 { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
631 { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
632 { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
633 { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
634 { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
635 { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
636 { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
cedb97b6 637 { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
d70c5fc7
NC
638 { "h-ext", HW_H_EXT, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_ext_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
639 { "h-psw", HW_H_PSW, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_psw_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
640 { "h-grb", HW_H_GRB, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_grb_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
641 { "h-cc", HW_H_CC, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_conditioncode_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
642 { "h-ecc", HW_H_ECC, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_extconditioncode_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
643 { "h-grb8", HW_H_GRB8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_grb8_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
644 { "h-r8", HW_H_R8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_r8_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
645 { "h-regmem8", HW_H_REGMEM8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_regmem8_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
646 { "h-regdiv8", HW_H_REGDIV8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_regdiv8_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
647 { "h-r0", HW_H_R0, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_reg0_name, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
648 { "h-r01", HW_H_R01, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_reg0_name1, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
649 { "h-regbmem8", HW_H_REGBMEM8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_regbmem8_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
650 { "h-memgr8", HW_H_MEMGR8, CGEN_ASM_KEYWORD, (PTR) & xc16x_cgen_opval_memgr8_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
651 { "h-cond", HW_H_COND, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
652 { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
653 { "h-sgtdis", HW_H_SGTDIS, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
654 { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
655};
656
657#undef A
658
659
660/* The instruction field table. */
661
d70c5fc7 662#define A(a) (1 << CGEN_IFLD_##a)
d70c5fc7
NC
663
664const CGEN_IFLD xc16x_cgen_ifld_table[] =
665{
666 { XC16X_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
667 { XC16X_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
668 { XC16X_F_OP1, "f-op1", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
669 { XC16X_F_OP2, "f-op2", 0, 32, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
670 { XC16X_F_CONDCODE, "f-condcode", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
671 { XC16X_F_ICONDCODE, "f-icondcode", 0, 32, 15, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
672 { XC16X_F_RCOND, "f-rcond", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
673 { XC16X_F_QCOND, "f-qcond", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
674 { XC16X_F_EXTCCODE, "f-extccode", 0, 32, 15, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
675 { XC16X_F_R0, "f-r0", 0, 32, 9, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
676 { XC16X_F_R1, "f-r1", 0, 32, 15, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
677 { XC16X_F_R2, "f-r2", 0, 32, 11, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
678 { XC16X_F_R3, "f-r3", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
679 { XC16X_F_R4, "f-r4", 0, 32, 11, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
680 { XC16X_F_UIMM2, "f-uimm2", 0, 32, 13, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
681 { XC16X_F_UIMM3, "f-uimm3", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
682 { XC16X_F_UIMM4, "f-uimm4", 0, 32, 15, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
683 { XC16X_F_UIMM7, "f-uimm7", 0, 32, 15, 7, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
684 { XC16X_F_UIMM8, "f-uimm8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
685 { XC16X_F_UIMM16, "f-uimm16", 0, 32, 31, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
686 { XC16X_F_MEMORY, "f-memory", 0, 32, 31, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
687 { XC16X_F_MEMGR8, "f-memgr8", 0, 32, 31, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
688 { XC16X_F_REL8, "f-rel8", 0, 32, 15, 8, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
689 { XC16X_F_RELHI8, "f-relhi8", 0, 32, 23, 8, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
690 { XC16X_F_REG8, "f-reg8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
691 { XC16X_F_REGMEM8, "f-regmem8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
692 { XC16X_F_REGOFF8, "f-regoff8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
693 { XC16X_F_REGHI8, "f-reghi8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
694 { XC16X_F_REGB8, "f-regb8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
695 { XC16X_F_SEG8, "f-seg8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
696 { XC16X_F_SEGNUM8, "f-segnum8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
697 { XC16X_F_MASK8, "f-mask8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
698 { XC16X_F_PAGENUM, "f-pagenum", 0, 32, 25, 10, { 0, { { { (1<<MACH_BASE), 0 } } } } },
699 { XC16X_F_DATAHI8, "f-datahi8", 0, 32, 31, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
700 { XC16X_F_DATA8, "f-data8", 0, 32, 23, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
701 { XC16X_F_OFFSET16, "f-offset16", 0, 32, 31, 16, { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
702 { XC16X_F_OP_BIT1, "f-op-bit1", 0, 32, 11, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
703 { XC16X_F_OP_BIT2, "f-op-bit2", 0, 32, 11, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
704 { XC16X_F_OP_BIT4, "f-op-bit4", 0, 32, 11, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
705 { XC16X_F_OP_BIT3, "f-op-bit3", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
706 { XC16X_F_OP_2BIT, "f-op-2bit", 0, 32, 10, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
707 { XC16X_F_OP_BITONE, "f-op-bitone", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
708 { XC16X_F_OP_ONEBIT, "f-op-onebit", 0, 32, 9, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
709 { XC16X_F_OP_1BIT, "f-op-1bit", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
710 { XC16X_F_OP_LBIT4, "f-op-lbit4", 0, 32, 15, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
711 { XC16X_F_OP_LBIT2, "f-op-lbit2", 0, 32, 15, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
712 { XC16X_F_OP_BIT8, "f-op-bit8", 0, 32, 31, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
713 { XC16X_F_OP_BIT16, "f-op-bit16", 0, 32, 31, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
714 { XC16X_F_QBIT, "f-qbit", 0, 32, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
715 { XC16X_F_QLOBIT, "f-qlobit", 0, 32, 31, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
716 { XC16X_F_QHIBIT, "f-qhibit", 0, 32, 27, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
717 { XC16X_F_QLOBIT2, "f-qlobit2", 0, 32, 27, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
718 { XC16X_F_POF, "f-pof", 0, 32, 31, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
719 { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
720};
721
722#undef A
723
724
725
726/* multi ifield declarations */
727
728
729
730/* multi ifield definitions */
731
732
733/* The operand table. */
734
d70c5fc7 735#define A(a) (1 << CGEN_OPERAND_##a)
d70c5fc7 736#define OPERAND(op) XC16X_OPERAND_##op
d70c5fc7
NC
737
738const CGEN_OPERAND xc16x_cgen_operand_table[] =
739{
740/* pc: program counter */
741 { "pc", XC16X_OPERAND_PC, HW_H_PC, 0, 0,
43e65147 742 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_NIL] } },
d70c5fc7
NC
743 { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
744/* sr: source register */
745 { "sr", XC16X_OPERAND_SR, HW_H_GR, 11, 4,
43e65147 746 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R2] } },
d70c5fc7
NC
747 { 0, { { { (1<<MACH_BASE), 0 } } } } },
748/* dr: destination register */
749 { "dr", XC16X_OPERAND_DR, HW_H_GR, 15, 4,
43e65147 750 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R1] } },
d70c5fc7
NC
751 { 0, { { { (1<<MACH_BASE), 0 } } } } },
752/* dri: destination register */
753 { "dri", XC16X_OPERAND_DRI, HW_H_GR, 11, 4,
43e65147 754 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R4] } },
d70c5fc7
NC
755 { 0, { { { (1<<MACH_BASE), 0 } } } } },
756/* srb: source register */
757 { "srb", XC16X_OPERAND_SRB, HW_H_GRB, 11, 4,
43e65147 758 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R2] } },
d70c5fc7
NC
759 { 0, { { { (1<<MACH_BASE), 0 } } } } },
760/* drb: destination register */
761 { "drb", XC16X_OPERAND_DRB, HW_H_GRB, 15, 4,
43e65147 762 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R1] } },
d70c5fc7
NC
763 { 0, { { { (1<<MACH_BASE), 0 } } } } },
764/* sr2: 2 bit source register */
765 { "sr2", XC16X_OPERAND_SR2, HW_H_GR, 9, 2,
43e65147 766 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R0] } },
d70c5fc7
NC
767 { 0, { { { (1<<MACH_BASE), 0 } } } } },
768/* src1: source register 1 */
769 { "src1", XC16X_OPERAND_SRC1, HW_H_GR, 15, 4,
43e65147 770 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R1] } },
d70c5fc7
NC
771 { 0, { { { (1<<MACH_BASE), 0 } } } } },
772/* src2: source register 2 */
773 { "src2", XC16X_OPERAND_SRC2, HW_H_GR, 11, 4,
43e65147 774 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_R2] } },
d70c5fc7
NC
775 { 0, { { { (1<<MACH_BASE), 0 } } } } },
776/* srdiv: source register 2 */
777 { "srdiv", XC16X_OPERAND_SRDIV, HW_H_REGDIV8, 15, 8,
43e65147 778 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REG8] } },
d70c5fc7
NC
779 { 0, { { { (1<<MACH_BASE), 0 } } } } },
780/* RegNam: PSW bits */
781 { "RegNam", XC16X_OPERAND_REGNAM, HW_H_PSW, 15, 8,
43e65147 782 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REG8] } },
d70c5fc7
NC
783 { 0, { { { (1<<MACH_BASE), 0 } } } } },
784/* uimm2: 2 bit unsigned number */
785 { "uimm2", XC16X_OPERAND_UIMM2, HW_H_EXT, 13, 2,
43e65147 786 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM2] } },
d70c5fc7
NC
787 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
788/* uimm3: 3 bit unsigned number */
789 { "uimm3", XC16X_OPERAND_UIMM3, HW_H_R01, 10, 3,
43e65147 790 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM3] } },
d70c5fc7
NC
791 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
792/* uimm4: 4 bit unsigned number */
793 { "uimm4", XC16X_OPERAND_UIMM4, HW_H_UINT, 15, 4,
43e65147 794 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM4] } },
d70c5fc7
NC
795 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
796/* uimm7: 7 bit trap number */
797 { "uimm7", XC16X_OPERAND_UIMM7, HW_H_UINT, 15, 7,
43e65147 798 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM7] } },
d70c5fc7
NC
799 { 0|A(HASH_PREFIX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
800/* uimm8: 8 bit unsigned immediate */
801 { "uimm8", XC16X_OPERAND_UIMM8, HW_H_UINT, 23, 8,
43e65147 802 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM8] } },
d70c5fc7
NC
803 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
804/* uimm16: 16 bit unsigned immediate */
805 { "uimm16", XC16X_OPERAND_UIMM16, HW_H_UINT, 31, 16,
43e65147 806 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM16] } },
d70c5fc7
NC
807 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
808/* upof16: 16 bit unsigned immediate */
809 { "upof16", XC16X_OPERAND_UPOF16, HW_H_ADDR, 31, 16,
43e65147 810 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_MEMORY] } },
d70c5fc7
NC
811 { 0|A(POF_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
812/* reg8: 8 bit word register number */
813 { "reg8", XC16X_OPERAND_REG8, HW_H_R8, 15, 8,
43e65147 814 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REG8] } },
d70c5fc7
NC
815 { 0, { { { (1<<MACH_BASE), 0 } } } } },
816/* regmem8: 8 bit word register number */
817 { "regmem8", XC16X_OPERAND_REGMEM8, HW_H_REGMEM8, 15, 8,
43e65147 818 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGMEM8] } },
d70c5fc7
NC
819 { 0, { { { (1<<MACH_BASE), 0 } } } } },
820/* regbmem8: 8 bit byte register number */
821 { "regbmem8", XC16X_OPERAND_REGBMEM8, HW_H_REGBMEM8, 15, 8,
43e65147 822 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGMEM8] } },
d70c5fc7
NC
823 { 0, { { { (1<<MACH_BASE), 0 } } } } },
824/* regoff8: 8 bit word register number */
825 { "regoff8", XC16X_OPERAND_REGOFF8, HW_H_R8, 15, 8,
43e65147 826 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGOFF8] } },
d70c5fc7
NC
827 { 0, { { { (1<<MACH_BASE), 0 } } } } },
828/* reghi8: 8 bit word register number */
829 { "reghi8", XC16X_OPERAND_REGHI8, HW_H_R8, 23, 8,
43e65147 830 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGHI8] } },
d70c5fc7
NC
831 { 0, { { { (1<<MACH_BASE), 0 } } } } },
832/* regb8: 8 bit byte register number */
833 { "regb8", XC16X_OPERAND_REGB8, HW_H_GRB8, 15, 8,
43e65147 834 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGB8] } },
d70c5fc7
NC
835 { 0, { { { (1<<MACH_BASE), 0 } } } } },
836/* genreg: 8 bit word register number */
837 { "genreg", XC16X_OPERAND_GENREG, HW_H_R8, 15, 8,
43e65147 838 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REGB8] } },
d70c5fc7
NC
839 { 0, { { { (1<<MACH_BASE), 0 } } } } },
840/* seg: 8 bit segment number */
841 { "seg", XC16X_OPERAND_SEG, HW_H_UINT, 15, 8,
43e65147 842 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_SEG8] } },
d70c5fc7
NC
843 { 0, { { { (1<<MACH_BASE), 0 } } } } },
844/* seghi8: 8 bit hi segment number */
845 { "seghi8", XC16X_OPERAND_SEGHI8, HW_H_UINT, 23, 8,
43e65147 846 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_SEGNUM8] } },
d70c5fc7
NC
847 { 0, { { { (1<<MACH_BASE), 0 } } } } },
848/* caddr: 16 bit address offset */
849 { "caddr", XC16X_OPERAND_CADDR, HW_H_ADDR, 31, 16,
43e65147 850 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OFFSET16] } },
d70c5fc7
NC
851 { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
852/* rel: 8 bit signed relative offset */
853 { "rel", XC16X_OPERAND_REL, HW_H_SINT, 15, 8,
43e65147 854 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_REL8] } },
d70c5fc7
NC
855 { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
856/* relhi: hi 8 bit signed relative offset */
857 { "relhi", XC16X_OPERAND_RELHI, HW_H_SINT, 23, 8,
43e65147 858 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_RELHI8] } },
d70c5fc7
NC
859 { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
860/* condbit: condition bit */
861 { "condbit", XC16X_OPERAND_CONDBIT, HW_H_COND, 0, 0,
43e65147 862 { 0, { (const PTR) 0 } },
d70c5fc7
NC
863 { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
864/* bit1: gap of 1 bit */
865 { "bit1", XC16X_OPERAND_BIT1, HW_H_UINT, 11, 1,
43e65147 866 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_BIT1] } },
d70c5fc7
NC
867 { 0, { { { (1<<MACH_BASE), 0 } } } } },
868/* bit2: gap of 2 bits */
869 { "bit2", XC16X_OPERAND_BIT2, HW_H_UINT, 11, 2,
43e65147 870 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_BIT2] } },
d70c5fc7
NC
871 { 0, { { { (1<<MACH_BASE), 0 } } } } },
872/* bit4: gap of 4 bits */
873 { "bit4", XC16X_OPERAND_BIT4, HW_H_UINT, 11, 4,
43e65147 874 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_BIT4] } },
d70c5fc7
NC
875 { 0, { { { (1<<MACH_BASE), 0 } } } } },
876/* lbit4: gap of 4 bits */
877 { "lbit4", XC16X_OPERAND_LBIT4, HW_H_UINT, 15, 4,
43e65147 878 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_LBIT4] } },
d70c5fc7
NC
879 { 0, { { { (1<<MACH_BASE), 0 } } } } },
880/* lbit2: gap of 2 bits */
881 { "lbit2", XC16X_OPERAND_LBIT2, HW_H_UINT, 15, 2,
43e65147 882 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_LBIT2] } },
d70c5fc7
NC
883 { 0, { { { (1<<MACH_BASE), 0 } } } } },
884/* bit8: gap of 8 bits */
885 { "bit8", XC16X_OPERAND_BIT8, HW_H_UINT, 31, 8,
43e65147 886 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_BIT8] } },
d70c5fc7
NC
887 { 0, { { { (1<<MACH_BASE), 0 } } } } },
888/* u4: gap of 4 bits */
889 { "u4", XC16X_OPERAND_U4, HW_H_R0, 15, 4,
43e65147 890 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM4] } },
d70c5fc7
NC
891 { 0, { { { (1<<MACH_BASE), 0 } } } } },
892/* bitone: field of 1 bit */
893 { "bitone", XC16X_OPERAND_BITONE, HW_H_UINT, 9, 1,
43e65147 894 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_ONEBIT] } },
d70c5fc7
NC
895 { 0, { { { (1<<MACH_BASE), 0 } } } } },
896/* bit01: field of 1 bit */
897 { "bit01", XC16X_OPERAND_BIT01, HW_H_UINT, 8, 1,
43e65147 898 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OP_1BIT] } },
d70c5fc7
NC
899 { 0, { { { (1<<MACH_BASE), 0 } } } } },
900/* cond: condition code */
901 { "cond", XC16X_OPERAND_COND, HW_H_CC, 7, 4,
43e65147 902 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_CONDCODE] } },
d70c5fc7
NC
903 { 0, { { { (1<<MACH_BASE), 0 } } } } },
904/* icond: indirect condition code */
905 { "icond", XC16X_OPERAND_ICOND, HW_H_CC, 15, 4,
43e65147 906 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_ICONDCODE] } },
d70c5fc7
NC
907 { 0, { { { (1<<MACH_BASE), 0 } } } } },
908/* extcond: extended condition code */
909 { "extcond", XC16X_OPERAND_EXTCOND, HW_H_ECC, 15, 5,
43e65147 910 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_EXTCCODE] } },
d70c5fc7
NC
911 { 0, { { { (1<<MACH_BASE), 0 } } } } },
912/* memory: 16 bit memory */
913 { "memory", XC16X_OPERAND_MEMORY, HW_H_ADDR, 31, 16,
43e65147 914 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_MEMORY] } },
d70c5fc7
NC
915 { 0, { { { (1<<MACH_BASE), 0 } } } } },
916/* memgr8: 16 bit memory */
917 { "memgr8", XC16X_OPERAND_MEMGR8, HW_H_MEMGR8, 31, 16,
43e65147 918 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_MEMGR8] } },
d70c5fc7
NC
919 { 0, { { { (1<<MACH_BASE), 0 } } } } },
920/* cbit: carry bit */
921 { "cbit", XC16X_OPERAND_CBIT, HW_H_CBIT, 0, 0,
43e65147 922 { 0, { (const PTR) 0 } },
d70c5fc7
NC
923 { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
924/* qbit: bit addr */
925 { "qbit", XC16X_OPERAND_QBIT, HW_H_UINT, 7, 4,
43e65147 926 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_QBIT] } },
d70c5fc7
NC
927 { 0|A(DOT_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
928/* qlobit: bit addr */
929 { "qlobit", XC16X_OPERAND_QLOBIT, HW_H_UINT, 31, 4,
43e65147 930 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_QLOBIT] } },
d70c5fc7
NC
931 { 0|A(DOT_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
932/* qhibit: bit addr */
933 { "qhibit", XC16X_OPERAND_QHIBIT, HW_H_UINT, 27, 4,
43e65147 934 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_QHIBIT] } },
d70c5fc7
NC
935 { 0|A(DOT_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
936/* mask8: 8 bit mask */
937 { "mask8", XC16X_OPERAND_MASK8, HW_H_UINT, 23, 8,
43e65147 938 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_MASK8] } },
d70c5fc7
NC
939 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
940/* masklo8: 8 bit mask */
941 { "masklo8", XC16X_OPERAND_MASKLO8, HW_H_UINT, 31, 8,
43e65147 942 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_DATAHI8] } },
d70c5fc7
NC
943 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
944/* pagenum: 10 bit page number */
945 { "pagenum", XC16X_OPERAND_PAGENUM, HW_H_UINT, 25, 10,
43e65147 946 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_PAGENUM] } },
d70c5fc7
NC
947 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
948/* data8: 8 bit data */
949 { "data8", XC16X_OPERAND_DATA8, HW_H_UINT, 23, 8,
43e65147 950 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_DATA8] } },
d70c5fc7
NC
951 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
952/* datahi8: 8 bit data */
953 { "datahi8", XC16X_OPERAND_DATAHI8, HW_H_UINT, 31, 8,
43e65147 954 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_DATAHI8] } },
d70c5fc7
NC
955 { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
956/* sgtdisbit: segmentation enable bit */
957 { "sgtdisbit", XC16X_OPERAND_SGTDISBIT, HW_H_SGTDIS, 0, 0,
43e65147 958 { 0, { (const PTR) 0 } },
d70c5fc7
NC
959 { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
960/* upag16: 16 bit unsigned immediate */
961 { "upag16", XC16X_OPERAND_UPAG16, HW_H_UINT, 31, 16,
43e65147 962 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_UIMM16] } },
d70c5fc7
NC
963 { 0|A(PAG_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
964/* useg8: 8 bit segment */
965 { "useg8", XC16X_OPERAND_USEG8, HW_H_UINT, 15, 8,
43e65147 966 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_SEG8] } },
d70c5fc7
NC
967 { 0|A(SEG_PREFIX), { { { (1<<MACH_BASE), 0 } } } } },
968/* useg16: 16 bit address offset */
969 { "useg16", XC16X_OPERAND_USEG16, HW_H_UINT, 31, 16,
43e65147 970 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OFFSET16] } },
d70c5fc7
NC
971 { 0|A(SEG_PREFIX)|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
972/* usof16: 16 bit address offset */
973 { "usof16", XC16X_OPERAND_USOF16, HW_H_UINT, 31, 16,
43e65147 974 { 0, { (const PTR) &xc16x_cgen_ifld_table[XC16X_F_OFFSET16] } },
d70c5fc7
NC
975 { 0|A(SOF_PREFIX)|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
976/* hash: # prefix */
977 { "hash", XC16X_OPERAND_HASH, HW_H_SINT, 0, 0,
43e65147 978 { 0, { (const PTR) 0 } },
d70c5fc7
NC
979 { 0, { { { (1<<MACH_BASE), 0 } } } } },
980/* dot: . prefix */
981 { "dot", XC16X_OPERAND_DOT, HW_H_SINT, 0, 0,
43e65147 982 { 0, { (const PTR) 0 } },
d70c5fc7
NC
983 { 0, { { { (1<<MACH_BASE), 0 } } } } },
984/* pof: pof: prefix */
985 { "pof", XC16X_OPERAND_POF, HW_H_SINT, 0, 0,
43e65147 986 { 0, { (const PTR) 0 } },
d70c5fc7
NC
987 { 0, { { { (1<<MACH_BASE), 0 } } } } },
988/* pag: pag: prefix */
989 { "pag", XC16X_OPERAND_PAG, HW_H_SINT, 0, 0,
43e65147 990 { 0, { (const PTR) 0 } },
d70c5fc7
NC
991 { 0, { { { (1<<MACH_BASE), 0 } } } } },
992/* sof: sof: prefix */
993 { "sof", XC16X_OPERAND_SOF, HW_H_SINT, 0, 0,
43e65147 994 { 0, { (const PTR) 0 } },
d70c5fc7
NC
995 { 0, { { { (1<<MACH_BASE), 0 } } } } },
996/* segm: seg: prefix */
997 { "segm", XC16X_OPERAND_SEGM, HW_H_SINT, 0, 0,
43e65147 998 { 0, { (const PTR) 0 } },
d70c5fc7
NC
999 { 0, { { { (1<<MACH_BASE), 0 } } } } },
1000/* sentinel */
1001 { 0, 0, 0, 0, 0,
1002 { 0, { (const PTR) 0 } },
1003 { 0, { { { (1<<MACH_BASE), 0 } } } } }
1004};
1005
1006#undef A
1007
1008
1009/* The instruction table. */
1010
1011#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
d70c5fc7 1012#define A(a) (1 << CGEN_INSN_##a)
d70c5fc7
NC
1013
1014static const CGEN_IBASE xc16x_cgen_insn_table[MAX_INSNS] =
1015{
1016 /* Special null first entry.
1017 A `num' value of zero is thus invalid.
1018 Also, the special `invalid' insn resides here. */
1019 { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } } },
1020/* add $reg8,$pof$upof16 */
1021 {
1022 XC16X_INSN_ADDRPOF, "addrpof", "add", 32,
1023 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1024 },
1025/* sub $reg8,$pof$upof16 */
1026 {
1027 XC16X_INSN_SUBRPOF, "subrpof", "sub", 32,
1028 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1029 },
1030/* addb $regb8,$pof$upof16 */
1031 {
1032 XC16X_INSN_ADDBRPOF, "addbrpof", "addb", 32,
1033 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1034 },
1035/* subb $regb8,$pof$upof16 */
1036 {
1037 XC16X_INSN_SUBBRPOF, "subbrpof", "subb", 32,
1038 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1039 },
1040/* add $reg8,$pag$upag16 */
1041 {
1042 XC16X_INSN_ADDRPAG, "addrpag", "add", 32,
1043 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1044 },
1045/* sub $reg8,$pag$upag16 */
1046 {
1047 XC16X_INSN_SUBRPAG, "subrpag", "sub", 32,
1048 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1049 },
1050/* addb $regb8,$pag$upag16 */
1051 {
1052 XC16X_INSN_ADDBRPAG, "addbrpag", "addb", 32,
1053 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1054 },
1055/* subb $regb8,$pag$upag16 */
1056 {
1057 XC16X_INSN_SUBBRPAG, "subbrpag", "subb", 32,
1058 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1059 },
1060/* addc $reg8,$pof$upof16 */
1061 {
1062 XC16X_INSN_ADDCRPOF, "addcrpof", "addc", 32,
1063 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1064 },
1065/* subc $reg8,$pof$upof16 */
1066 {
1067 XC16X_INSN_SUBCRPOF, "subcrpof", "subc", 32,
1068 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1069 },
1070/* addcb $regb8,$pof$upof16 */
1071 {
1072 XC16X_INSN_ADDCBRPOF, "addcbrpof", "addcb", 32,
1073 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1074 },
1075/* subcb $regb8,$pof$upof16 */
1076 {
1077 XC16X_INSN_SUBCBRPOF, "subcbrpof", "subcb", 32,
1078 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1079 },
1080/* addc $reg8,$pag$upag16 */
1081 {
1082 XC16X_INSN_ADDCRPAG, "addcrpag", "addc", 32,
1083 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1084 },
1085/* subc $reg8,$pag$upag16 */
1086 {
1087 XC16X_INSN_SUBCRPAG, "subcrpag", "subc", 32,
1088 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1089 },
1090/* addcb $regb8,$pag$upag16 */
1091 {
1092 XC16X_INSN_ADDCBRPAG, "addcbrpag", "addcb", 32,
1093 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1094 },
1095/* subcb $regb8,$pag$upag16 */
1096 {
1097 XC16X_INSN_SUBCBRPAG, "subcbrpag", "subcb", 32,
1098 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1099 },
1100/* add $pof$upof16,$reg8 */
1101 {
1102 XC16X_INSN_ADDRPOFR, "addrpofr", "add", 32,
1103 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1104 },
1105/* sub $pof$upof16,$reg8 */
1106 {
1107 XC16X_INSN_SUBRPOFR, "subrpofr", "sub", 32,
1108 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1109 },
1110/* addb $pof$upof16,$regb8 */
1111 {
1112 XC16X_INSN_ADDBRPOFR, "addbrpofr", "addb", 32,
1113 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1114 },
1115/* subb $pof$upof16,$regb8 */
1116 {
1117 XC16X_INSN_SUBBRPOFR, "subbrpofr", "subb", 32,
1118 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1119 },
1120/* addc $pof$upof16,$reg8 */
1121 {
1122 XC16X_INSN_ADDCRPOFR, "addcrpofr", "addc", 32,
1123 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1124 },
1125/* subc $pof$upof16,$reg8 */
1126 {
1127 XC16X_INSN_SUBCRPOFR, "subcrpofr", "subc", 32,
1128 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1129 },
1130/* addcb $pof$upof16,$regb8 */
1131 {
1132 XC16X_INSN_ADDCBRPOFR, "addcbrpofr", "addcb", 32,
1133 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1134 },
1135/* subcb $pof$upof16,$regb8 */
1136 {
1137 XC16X_INSN_SUBCBRPOFR, "subcbrpofr", "subcb", 32,
1138 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1139 },
1140/* add $reg8,$hash$pof$uimm16 */
1141 {
1142 XC16X_INSN_ADDRHPOF, "addrhpof", "add", 32,
1143 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1144 },
1145/* sub $reg8,$hash$pof$uimm16 */
1146 {
1147 XC16X_INSN_SUBRHPOF, "subrhpof", "sub", 32,
1148 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1149 },
1150/* add $reg8,$hash$pag$uimm16 */
1151 {
1152 XC16X_INSN_ADDBRHPOF, "addbrhpof", "add", 32,
1153 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1154 },
1155/* sub $reg8,$hash$pag$uimm16 */
1156 {
1157 XC16X_INSN_SUBBRHPOF, "subbrhpof", "sub", 32,
1158 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1159 },
1160/* add $dr,$hash$pof$uimm3 */
1161 {
1162 XC16X_INSN_ADDRHPOF3, "addrhpof3", "add", 16,
1163 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1164 },
1165/* sub $dr,$hash$pof$uimm3 */
1166 {
1167 XC16X_INSN_SUBRHPOF3, "subrhpof3", "sub", 16,
1168 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1169 },
1170/* addb $drb,$hash$pag$uimm3 */
1171 {
1172 XC16X_INSN_ADDBRHPAG3, "addbrhpag3", "addb", 16,
1173 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1174 },
1175/* subb $drb,$hash$pag$uimm3 */
1176 {
1177 XC16X_INSN_SUBBRHPAG3, "subbrhpag3", "subb", 16,
1178 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1179 },
1180/* add $dr,$hash$pag$uimm3 */
1181 {
1182 XC16X_INSN_ADDRHPAG3, "addrhpag3", "add", 16,
1183 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1184 },
1185/* sub $dr,$hash$pag$uimm3 */
1186 {
1187 XC16X_INSN_SUBRHPAG3, "subrhpag3", "sub", 16,
1188 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1189 },
1190/* addb $drb,$hash$pof$uimm3 */
1191 {
1192 XC16X_INSN_ADDBRHPOF3, "addbrhpof3", "addb", 16,
1193 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1194 },
1195/* subb $drb,$hash$pof$uimm3 */
1196 {
1197 XC16X_INSN_SUBBRHPOF3, "subbrhpof3", "subb", 16,
1198 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1199 },
1200/* addb $regb8,$hash$pof$uimm8 */
1201 {
1202 XC16X_INSN_ADDRBHPOF, "addrbhpof", "addb", 32,
1203 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1204 },
1205/* subb $regb8,$hash$pof$uimm8 */
1206 {
1207 XC16X_INSN_SUBRBHPOF, "subrbhpof", "subb", 32,
1208 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1209 },
1210/* addb $regb8,$hash$pag$uimm8 */
1211 {
1212 XC16X_INSN_ADDBRHPAG, "addbrhpag", "addb", 32,
1213 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1214 },
1215/* subb $regb8,$hash$pag$uimm8 */
1216 {
1217 XC16X_INSN_SUBBRHPAG, "subbrhpag", "subb", 32,
1218 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1219 },
1220/* addc $reg8,$hash$pof$uimm16 */
1221 {
1222 XC16X_INSN_ADDCRHPOF, "addcrhpof", "addc", 32,
1223 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1224 },
1225/* subc $reg8,$hash$pof$uimm16 */
1226 {
1227 XC16X_INSN_SUBCRHPOF, "subcrhpof", "subc", 32,
1228 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1229 },
1230/* addc $reg8,$hash$pag$uimm16 */
1231 {
1232 XC16X_INSN_ADDCBRHPOF, "addcbrhpof", "addc", 32,
1233 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1234 },
1235/* subc $reg8,$hash$pag$uimm16 */
1236 {
1237 XC16X_INSN_SUBCBRHPOF, "subcbrhpof", "subc", 32,
1238 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1239 },
1240/* addc $dr,$hash$pof$uimm3 */
1241 {
1242 XC16X_INSN_ADDCRHPOF3, "addcrhpof3", "addc", 16,
1243 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1244 },
1245/* subc $dr,$hash$pof$uimm3 */
1246 {
1247 XC16X_INSN_SUBCRHPOF3, "subcrhpof3", "subc", 16,
1248 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1249 },
1250/* addcb $drb,$hash$pag$uimm3 */
1251 {
1252 XC16X_INSN_ADDCBRHPAG3, "addcbrhpag3", "addcb", 16,
1253 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1254 },
1255/* subcb $drb,$hash$pag$uimm3 */
1256 {
1257 XC16X_INSN_SUBCBRHPAG3, "subcbrhpag3", "subcb", 16,
1258 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1259 },
1260/* addc $dr,$hash$pag$uimm3 */
1261 {
1262 XC16X_INSN_ADDCRHPAG3, "addcrhpag3", "addc", 16,
1263 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1264 },
1265/* subc $dr,$hash$pag$uimm3 */
1266 {
1267 XC16X_INSN_SUBCRHPAG3, "subcrhpag3", "subc", 16,
1268 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1269 },
1270/* addcb $drb,$hash$pof$uimm3 */
1271 {
1272 XC16X_INSN_ADDCBRHPOF3, "addcbrhpof3", "addcb", 16,
1273 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1274 },
1275/* subcb $drb,$hash$pof$uimm3 */
1276 {
1277 XC16X_INSN_SUBCBRHPOF3, "subcbrhpof3", "subcb", 16,
1278 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1279 },
1280/* addcb $regb8,$hash$pof$uimm8 */
1281 {
1282 XC16X_INSN_ADDCRBHPOF, "addcrbhpof", "addcb", 32,
1283 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1284 },
1285/* subcb $regb8,$hash$pof$uimm8 */
1286 {
1287 XC16X_INSN_SUBCRBHPOF, "subcrbhpof", "subcb", 32,
1288 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1289 },
1290/* addcb $regb8,$hash$pag$uimm8 */
1291 {
1292 XC16X_INSN_ADDCBRHPAG, "addcbrhpag", "addcb", 32,
1293 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1294 },
1295/* subcb $regb8,$hash$pag$uimm8 */
1296 {
1297 XC16X_INSN_SUBCBRHPAG, "subcbrhpag", "subcb", 32,
1298 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1299 },
1300/* add $dr,$hash$uimm3 */
1301 {
1302 XC16X_INSN_ADDRI, "addri", "add", 16,
1303 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1304 },
1305/* sub $dr,$hash$uimm3 */
1306 {
1307 XC16X_INSN_SUBRI, "subri", "sub", 16,
1308 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1309 },
1310/* addb $drb,$hash$uimm3 */
1311 {
1312 XC16X_INSN_ADDBRI, "addbri", "addb", 16,
1313 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1314 },
1315/* subb $drb,$hash$uimm3 */
1316 {
1317 XC16X_INSN_SUBBRI, "subbri", "subb", 16,
1318 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1319 },
1320/* add $reg8,$hash$uimm16 */
1321 {
1322 XC16X_INSN_ADDRIM, "addrim", "add", 32,
1323 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1324 },
1325/* sub $reg8,$hash$uimm16 */
1326 {
1327 XC16X_INSN_SUBRIM, "subrim", "sub", 32,
1328 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1329 },
1330/* addb $regb8,$hash$uimm8 */
1331 {
1332 XC16X_INSN_ADDBRIM, "addbrim", "addb", 32,
1333 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1334 },
1335/* subb $regb8,$hash$uimm8 */
1336 {
1337 XC16X_INSN_SUBBRIM, "subbrim", "subb", 32,
1338 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1339 },
1340/* addc $dr,$hash$uimm3 */
1341 {
1342 XC16X_INSN_ADDCRI, "addcri", "addc", 16,
1343 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1344 },
1345/* subc $dr,$hash$uimm3 */
1346 {
1347 XC16X_INSN_SUBCRI, "subcri", "subc", 16,
1348 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1349 },
1350/* addcb $drb,$hash$uimm3 */
1351 {
1352 XC16X_INSN_ADDCBRI, "addcbri", "addcb", 16,
1353 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1354 },
1355/* subcb $drb,$hash$uimm3 */
1356 {
1357 XC16X_INSN_SUBCBRI, "subcbri", "subcb", 16,
1358 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1359 },
1360/* addc $reg8,$hash$uimm16 */
1361 {
1362 XC16X_INSN_ADDCRIM, "addcrim", "addc", 32,
1363 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1364 },
1365/* subc $reg8,$hash$uimm16 */
1366 {
1367 XC16X_INSN_SUBCRIM, "subcrim", "subc", 32,
1368 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1369 },
1370/* addcb $regb8,$hash$uimm8 */
1371 {
1372 XC16X_INSN_ADDCBRIM, "addcbrim", "addcb", 32,
1373 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1374 },
1375/* subcb $regb8,$hash$uimm8 */
1376 {
1377 XC16X_INSN_SUBCBRIM, "subcbrim", "subcb", 32,
1378 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1379 },
1380/* add $dr,$sr */
1381 {
1382 XC16X_INSN_ADDR, "addr", "add", 16,
1383 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1384 },
1385/* sub $dr,$sr */
1386 {
1387 XC16X_INSN_SUBR, "subr", "sub", 16,
1388 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1389 },
1390/* addb $drb,$srb */
1391 {
1392 XC16X_INSN_ADDBR, "addbr", "addb", 16,
1393 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1394 },
1395/* subb $drb,$srb */
1396 {
1397 XC16X_INSN_SUBBR, "subbr", "subb", 16,
1398 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1399 },
1400/* add $dr,[$sr2] */
1401 {
1402 XC16X_INSN_ADD2, "add2", "add", 16,
1403 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1404 },
1405/* sub $dr,[$sr2] */
1406 {
1407 XC16X_INSN_SUB2, "sub2", "sub", 16,
1408 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1409 },
1410/* addb $drb,[$sr2] */
1411 {
1412 XC16X_INSN_ADDB2, "addb2", "addb", 16,
1413 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1414 },
1415/* subb $drb,[$sr2] */
1416 {
1417 XC16X_INSN_SUBB2, "subb2", "subb", 16,
1418 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1419 },
1420/* add $dr,[$sr2+] */
1421 {
1422 XC16X_INSN_ADD2I, "add2i", "add", 16,
1423 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1424 },
1425/* sub $dr,[$sr2+] */
1426 {
1427 XC16X_INSN_SUB2I, "sub2i", "sub", 16,
1428 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1429 },
1430/* addb $drb,[$sr2+] */
1431 {
1432 XC16X_INSN_ADDB2I, "addb2i", "addb", 16,
1433 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1434 },
1435/* subb $drb,[$sr2+] */
1436 {
1437 XC16X_INSN_SUBB2I, "subb2i", "subb", 16,
1438 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1439 },
1440/* addc $dr,$sr */
1441 {
1442 XC16X_INSN_ADDCR, "addcr", "addc", 16,
1443 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1444 },
1445/* subc $dr,$sr */
1446 {
1447 XC16X_INSN_SUBCR, "subcr", "subc", 16,
1448 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1449 },
1450/* addcb $drb,$srb */
1451 {
1452 XC16X_INSN_ADDBCR, "addbcr", "addcb", 16,
1453 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1454 },
1455/* subcb $drb,$srb */
1456 {
1457 XC16X_INSN_SUBBCR, "subbcr", "subcb", 16,
1458 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1459 },
1460/* addc $dr,[$sr2] */
1461 {
1462 XC16X_INSN_ADDCR2, "addcr2", "addc", 16,
1463 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1464 },
1465/* subc $dr,[$sr2] */
1466 {
1467 XC16X_INSN_SUBCR2, "subcr2", "subc", 16,
1468 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1469 },
1470/* addcb $drb,[$sr2] */
1471 {
1472 XC16X_INSN_ADDBCR2, "addbcr2", "addcb", 16,
1473 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1474 },
1475/* subcb $drb,[$sr2] */
1476 {
1477 XC16X_INSN_SUBBCR2, "subbcr2", "subcb", 16,
1478 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1479 },
1480/* addc $dr,[$sr2+] */
1481 {
1482 XC16X_INSN_ADDCR2I, "addcr2i", "addc", 16,
1483 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1484 },
1485/* subc $dr,[$sr2+] */
1486 {
1487 XC16X_INSN_SUBCR2I, "subcr2i", "subc", 16,
1488 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1489 },
1490/* addcb $drb,[$sr2+] */
1491 {
1492 XC16X_INSN_ADDBCR2I, "addbcr2i", "addcb", 16,
1493 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1494 },
1495/* subcb $drb,[$sr2+] */
1496 {
1497 XC16X_INSN_SUBBCR2I, "subbcr2i", "subcb", 16,
1498 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1499 },
1500/* add $regmem8,$memgr8 */
1501 {
1502 XC16X_INSN_ADDRM2, "addrm2", "add", 32,
1503 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1504 },
1505/* add $memgr8,$regmem8 */
1506 {
1507 XC16X_INSN_ADDRM3, "addrm3", "add", 32,
1508 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1509 },
1510/* add $reg8,$memory */
1511 {
1512 XC16X_INSN_ADDRM, "addrm", "add", 32,
1513 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1514 },
1515/* add $memory,$reg8 */
1516 {
1517 XC16X_INSN_ADDRM1, "addrm1", "add", 32,
1518 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1519 },
1520/* sub $regmem8,$memgr8 */
1521 {
1522 XC16X_INSN_SUBRM3, "subrm3", "sub", 32,
1523 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1524 },
1525/* sub $memgr8,$regmem8 */
1526 {
1527 XC16X_INSN_SUBRM2, "subrm2", "sub", 32,
1528 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1529 },
1530/* sub $reg8,$memory */
1531 {
1532 XC16X_INSN_SUBRM1, "subrm1", "sub", 32,
1533 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1534 },
1535/* sub $memory,$reg8 */
1536 {
1537 XC16X_INSN_SUBRM, "subrm", "sub", 32,
1538 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1539 },
1540/* addb $regbmem8,$memgr8 */
1541 {
1542 XC16X_INSN_ADDBRM2, "addbrm2", "addb", 32,
1543 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1544 },
1545/* addb $memgr8,$regbmem8 */
1546 {
1547 XC16X_INSN_ADDBRM3, "addbrm3", "addb", 32,
1548 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1549 },
1550/* addb $regb8,$memory */
1551 {
1552 XC16X_INSN_ADDBRM, "addbrm", "addb", 32,
1553 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1554 },
1555/* addb $memory,$regb8 */
1556 {
1557 XC16X_INSN_ADDBRM1, "addbrm1", "addb", 32,
1558 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1559 },
1560/* subb $regbmem8,$memgr8 */
1561 {
1562 XC16X_INSN_SUBBRM3, "subbrm3", "subb", 32,
1563 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1564 },
1565/* subb $memgr8,$regbmem8 */
1566 {
1567 XC16X_INSN_SUBBRM2, "subbrm2", "subb", 32,
1568 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1569 },
1570/* subb $regb8,$memory */
1571 {
1572 XC16X_INSN_SUBBRM1, "subbrm1", "subb", 32,
1573 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1574 },
1575/* subb $memory,$regb8 */
1576 {
1577 XC16X_INSN_SUBBRM, "subbrm", "subb", 32,
1578 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1579 },
1580/* addc $regmem8,$memgr8 */
1581 {
1582 XC16X_INSN_ADDCRM2, "addcrm2", "addc", 32,
1583 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1584 },
1585/* addc $memgr8,$regmem8 */
1586 {
1587 XC16X_INSN_ADDCRM3, "addcrm3", "addc", 32,
1588 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1589 },
1590/* addc $reg8,$memory */
1591 {
1592 XC16X_INSN_ADDCRM, "addcrm", "addc", 32,
1593 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1594 },
1595/* addc $memory,$reg8 */
1596 {
1597 XC16X_INSN_ADDCRM1, "addcrm1", "addc", 32,
1598 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1599 },
1600/* subc $regmem8,$memgr8 */
1601 {
1602 XC16X_INSN_SUBCRM3, "subcrm3", "subc", 32,
1603 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1604 },
1605/* subc $memgr8,$regmem8 */
1606 {
1607 XC16X_INSN_SUBCRM2, "subcrm2", "subc", 32,
1608 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1609 },
1610/* subc $reg8,$memory */
1611 {
1612 XC16X_INSN_SUBCRM1, "subcrm1", "subc", 32,
1613 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1614 },
1615/* subc $memory,$reg8 */
1616 {
1617 XC16X_INSN_SUBCRM, "subcrm", "subc", 32,
1618 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1619 },
1620/* addcb $regbmem8,$memgr8 */
1621 {
1622 XC16X_INSN_ADDCBRM2, "addcbrm2", "addcb", 32,
1623 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1624 },
1625/* addcb $memgr8,$regbmem8 */
1626 {
1627 XC16X_INSN_ADDCBRM3, "addcbrm3", "addcb", 32,
1628 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1629 },
1630/* addcb $regb8,$memory */
1631 {
1632 XC16X_INSN_ADDCBRM, "addcbrm", "addcb", 32,
1633 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1634 },
1635/* addcb $memory,$regb8 */
1636 {
1637 XC16X_INSN_ADDCBRM1, "addcbrm1", "addcb", 32,
1638 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1639 },
1640/* subcb $regbmem8,$memgr8 */
1641 {
1642 XC16X_INSN_SUBCBRM3, "subcbrm3", "subcb", 32,
1643 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1644 },
1645/* subcb $memgr8,$regbmem8 */
1646 {
1647 XC16X_INSN_SUBCBRM2, "subcbrm2", "subcb", 32,
1648 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1649 },
1650/* subcb $regb8,$memory */
1651 {
1652 XC16X_INSN_SUBCBRM1, "subcbrm1", "subcb", 32,
1653 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1654 },
1655/* subcb $memory,$regb8 */
1656 {
1657 XC16X_INSN_SUBCBRM, "subcbrm", "subcb", 32,
1658 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1659 },
1660/* mul $src1,$src2 */
1661 {
1662 XC16X_INSN_MULS, "muls", "mul", 16,
1663 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1664 },
1665/* mulu $src1,$src2 */
1666 {
1667 XC16X_INSN_MULU, "mulu", "mulu", 16,
1668 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1669 },
1670/* div $srdiv */
1671 {
1672 XC16X_INSN_DIV, "div", "div", 16,
1673 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1674 },
1675/* divl $srdiv */
1676 {
1677 XC16X_INSN_DIVL, "divl", "divl", 16,
1678 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1679 },
1680/* divlu $srdiv */
1681 {
1682 XC16X_INSN_DIVLU, "divlu", "divlu", 16,
1683 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1684 },
1685/* divu $srdiv */
1686 {
1687 XC16X_INSN_DIVU, "divu", "divu", 16,
1688 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1689 },
1690/* cpl $dr */
1691 {
1692 XC16X_INSN_CPL, "cpl", "cpl", 16,
1693 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1694 },
1695/* cplb $drb */
1696 {
1697 XC16X_INSN_CPLB, "cplb", "cplb", 16,
1698 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1699 },
1700/* neg $dr */
1701 {
1702 XC16X_INSN_NEG, "neg", "neg", 16,
1703 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1704 },
1705/* negb $drb */
1706 {
1707 XC16X_INSN_NEGB, "negb", "negb", 16,
1708 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1709 },
1710/* and $dr,$sr */
1711 {
1712 XC16X_INSN_ANDR, "andr", "and", 16,
1713 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1714 },
1715/* or $dr,$sr */
1716 {
1717 XC16X_INSN_ORR, "orr", "or", 16,
1718 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1719 },
1720/* xor $dr,$sr */
1721 {
1722 XC16X_INSN_XORR, "xorr", "xor", 16,
1723 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1724 },
1725/* andb $drb,$srb */
1726 {
1727 XC16X_INSN_ANDBR, "andbr", "andb", 16,
1728 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1729 },
1730/* orb $drb,$srb */
1731 {
1732 XC16X_INSN_ORBR, "orbr", "orb", 16,
1733 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1734 },
1735/* xorb $drb,$srb */
1736 {
1737 XC16X_INSN_XORBR, "xorbr", "xorb", 16,
1738 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1739 },
1740/* and $dr,$hash$uimm3 */
1741 {
1742 XC16X_INSN_ANDRI, "andri", "and", 16,
1743 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1744 },
1745/* or $dr,$hash$uimm3 */
1746 {
1747 XC16X_INSN_ORRI, "orri", "or", 16,
1748 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1749 },
1750/* xor $dr,$hash$uimm3 */
1751 {
1752 XC16X_INSN_XORRI, "xorri", "xor", 16,
1753 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1754 },
1755/* andb $drb,$hash$uimm3 */
1756 {
1757 XC16X_INSN_ANDBRI, "andbri", "andb", 16,
1758 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1759 },
1760/* orb $drb,$hash$uimm3 */
1761 {
1762 XC16X_INSN_ORBRI, "orbri", "orb", 16,
1763 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1764 },
1765/* xorb $drb,$hash$uimm3 */
1766 {
1767 XC16X_INSN_XORBRI, "xorbri", "xorb", 16,
1768 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1769 },
1770/* and $reg8,$hash$uimm16 */
1771 {
1772 XC16X_INSN_ANDRIM, "andrim", "and", 32,
1773 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1774 },
1775/* or $reg8,$hash$uimm16 */
1776 {
1777 XC16X_INSN_ORRIM, "orrim", "or", 32,
1778 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1779 },
1780/* xor $reg8,$hash$uimm16 */
1781 {
1782 XC16X_INSN_XORRIM, "xorrim", "xor", 32,
1783 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1784 },
1785/* andb $regb8,$hash$uimm8 */
1786 {
1787 XC16X_INSN_ANDBRIM, "andbrim", "andb", 32,
1788 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1789 },
1790/* orb $regb8,$hash$uimm8 */
1791 {
1792 XC16X_INSN_ORBRIM, "orbrim", "orb", 32,
1793 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1794 },
1795/* xorb $regb8,$hash$uimm8 */
1796 {
1797 XC16X_INSN_XORBRIM, "xorbrim", "xorb", 32,
1798 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1799 },
1800/* and $dr,[$sr2] */
1801 {
1802 XC16X_INSN_AND2, "and2", "and", 16,
1803 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1804 },
1805/* or $dr,[$sr2] */
1806 {
1807 XC16X_INSN_OR2, "or2", "or", 16,
1808 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1809 },
1810/* xor $dr,[$sr2] */
1811 {
1812 XC16X_INSN_XOR2, "xor2", "xor", 16,
1813 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1814 },
1815/* andb $drb,[$sr2] */
1816 {
1817 XC16X_INSN_ANDB2, "andb2", "andb", 16,
1818 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1819 },
1820/* orb $drb,[$sr2] */
1821 {
1822 XC16X_INSN_ORB2, "orb2", "orb", 16,
1823 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1824 },
1825/* xorb $drb,[$sr2] */
1826 {
1827 XC16X_INSN_XORB2, "xorb2", "xorb", 16,
1828 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1829 },
1830/* and $dr,[$sr2+] */
1831 {
1832 XC16X_INSN_AND2I, "and2i", "and", 16,
1833 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1834 },
1835/* or $dr,[$sr2+] */
1836 {
1837 XC16X_INSN_OR2I, "or2i", "or", 16,
1838 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1839 },
1840/* xor $dr,[$sr2+] */
1841 {
1842 XC16X_INSN_XOR2I, "xor2i", "xor", 16,
1843 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1844 },
1845/* andb $drb,[$sr2+] */
1846 {
1847 XC16X_INSN_ANDB2I, "andb2i", "andb", 16,
1848 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1849 },
1850/* orb $drb,[$sr2+] */
1851 {
1852 XC16X_INSN_ORB2I, "orb2i", "orb", 16,
1853 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1854 },
1855/* xorb $drb,[$sr2+] */
1856 {
1857 XC16X_INSN_XORB2I, "xorb2i", "xorb", 16,
1858 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1859 },
1860/* and $pof$reg8,$upof16 */
1861 {
1862 XC16X_INSN_ANDPOFR, "andpofr", "and", 32,
1863 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1864 },
1865/* or $pof$reg8,$upof16 */
1866 {
1867 XC16X_INSN_ORPOFR, "orpofr", "or", 32,
1868 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1869 },
1870/* xor $pof$reg8,$upof16 */
1871 {
1872 XC16X_INSN_XORPOFR, "xorpofr", "xor", 32,
1873 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1874 },
1875/* andb $pof$regb8,$upof16 */
1876 {
1877 XC16X_INSN_ANDBPOFR, "andbpofr", "andb", 32,
1878 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1879 },
1880/* orb $pof$regb8,$upof16 */
1881 {
1882 XC16X_INSN_ORBPOFR, "orbpofr", "orb", 32,
1883 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1884 },
1885/* xorb $pof$regb8,$upof16 */
1886 {
1887 XC16X_INSN_XORBPOFR, "xorbpofr", "xorb", 32,
1888 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1889 },
1890/* and $pof$upof16,$reg8 */
1891 {
1892 XC16X_INSN_ANDRPOFR, "andrpofr", "and", 32,
1893 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1894 },
1895/* or $pof$upof16,$reg8 */
1896 {
1897 XC16X_INSN_ORRPOFR, "orrpofr", "or", 32,
1898 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1899 },
1900/* xor $pof$upof16,$reg8 */
1901 {
1902 XC16X_INSN_XORRPOFR, "xorrpofr", "xor", 32,
1903 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1904 },
1905/* andb $pof$upof16,$regb8 */
1906 {
1907 XC16X_INSN_ANDBRPOFR, "andbrpofr", "andb", 32,
1908 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1909 },
1910/* orb $pof$upof16,$regb8 */
1911 {
1912 XC16X_INSN_ORBRPOFR, "orbrpofr", "orb", 32,
1913 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1914 },
1915/* xorb $pof$upof16,$regb8 */
1916 {
1917 XC16X_INSN_XORBRPOFR, "xorbrpofr", "xorb", 32,
1918 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1919 },
1920/* and $regmem8,$memgr8 */
1921 {
1922 XC16X_INSN_ANDRM2, "andrm2", "and", 32,
1923 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1924 },
1925/* and $memgr8,$regmem8 */
1926 {
1927 XC16X_INSN_ANDRM3, "andrm3", "and", 32,
1928 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1929 },
1930/* and $reg8,$memory */
1931 {
1932 XC16X_INSN_ANDRM, "andrm", "and", 32,
1933 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1934 },
1935/* and $memory,$reg8 */
1936 {
1937 XC16X_INSN_ANDRM1, "andrm1", "and", 32,
1938 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1939 },
1940/* or $regmem8,$memgr8 */
1941 {
1942 XC16X_INSN_ORRM3, "orrm3", "or", 32,
1943 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1944 },
1945/* or $memgr8,$regmem8 */
1946 {
1947 XC16X_INSN_ORRM2, "orrm2", "or", 32,
1948 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1949 },
1950/* or $reg8,$memory */
1951 {
1952 XC16X_INSN_ORRM1, "orrm1", "or", 32,
1953 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1954 },
1955/* or $memory,$reg8 */
1956 {
1957 XC16X_INSN_ORRM, "orrm", "or", 32,
1958 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1959 },
1960/* xor $regmem8,$memgr8 */
1961 {
1962 XC16X_INSN_XORRM3, "xorrm3", "xor", 32,
1963 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1964 },
1965/* xor $memgr8,$regmem8 */
1966 {
1967 XC16X_INSN_XORRM2, "xorrm2", "xor", 32,
1968 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1969 },
1970/* xor $reg8,$memory */
1971 {
1972 XC16X_INSN_XORRM1, "xorrm1", "xor", 32,
1973 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1974 },
1975/* xor $memory,$reg8 */
1976 {
1977 XC16X_INSN_XORRM, "xorrm", "xor", 32,
1978 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1979 },
1980/* andb $regbmem8,$memgr8 */
1981 {
1982 XC16X_INSN_ANDBRM2, "andbrm2", "andb", 32,
1983 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1984 },
1985/* andb $memgr8,$regbmem8 */
1986 {
1987 XC16X_INSN_ANDBRM3, "andbrm3", "andb", 32,
1988 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1989 },
1990/* andb $regb8,$memory */
1991 {
1992 XC16X_INSN_ANDBRM, "andbrm", "andb", 32,
1993 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1994 },
1995/* andb $memory,$regb8 */
1996 {
1997 XC16X_INSN_ANDBRM1, "andbrm1", "andb", 32,
1998 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
1999 },
2000/* orb $regbmem8,$memgr8 */
2001 {
2002 XC16X_INSN_ORBRM3, "orbrm3", "orb", 32,
2003 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2004 },
2005/* orb $memgr8,$regbmem8 */
2006 {
2007 XC16X_INSN_ORBRM2, "orbrm2", "orb", 32,
2008 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2009 },
2010/* orb $regb8,$memory */
2011 {
2012 XC16X_INSN_ORBRM1, "orbrm1", "orb", 32,
2013 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2014 },
2015/* orb $memory,$regb8 */
2016 {
2017 XC16X_INSN_ORBRM, "orbrm", "orb", 32,
2018 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2019 },
2020/* xorb $regbmem8,$memgr8 */
2021 {
2022 XC16X_INSN_XORBRM3, "xorbrm3", "xorb", 32,
2023 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2024 },
2025/* xorb $memgr8,$regbmem8 */
2026 {
2027 XC16X_INSN_XORBRM2, "xorbrm2", "xorb", 32,
2028 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2029 },
2030/* xorb $regb8,$memory */
2031 {
2032 XC16X_INSN_XORBRM1, "xorbrm1", "xorb", 32,
2033 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2034 },
2035/* xorb $memory,$regb8 */
2036 {
2037 XC16X_INSN_XORBRM, "xorbrm", "xorb", 32,
2038 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2039 },
2040/* mov $dr,$sr */
2041 {
2042 XC16X_INSN_MOVR, "movr", "mov", 16,
2043 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2044 },
2045/* movb $drb,$srb */
2046 {
2047 XC16X_INSN_MOVRB, "movrb", "movb", 16,
2048 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2049 },
2050/* mov $dri,$hash$u4 */
2051 {
2052 XC16X_INSN_MOVRI, "movri", "mov", 16,
2053 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2054 },
2055/* movb $srb,$hash$u4 */
2056 {
2057 XC16X_INSN_MOVBRI, "movbri", "movb", 16,
2058 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2059 },
2060/* mov $reg8,$hash$uimm16 */
2061 {
2062 XC16X_INSN_MOVI, "movi", "mov", 32,
2063 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2064 },
2065/* movb $regb8,$hash$uimm8 */
2066 {
2067 XC16X_INSN_MOVBI, "movbi", "movb", 32,
2068 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2069 },
2070/* mov $dr,[$sr] */
2071 {
2072 XC16X_INSN_MOVR2, "movr2", "mov", 16,
2073 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2074 },
2075/* movb $drb,[$sr] */
2076 {
2077 XC16X_INSN_MOVBR2, "movbr2", "movb", 16,
2078 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2079 },
2080/* mov [$sr],$dr */
2081 {
2082 XC16X_INSN_MOVRI2, "movri2", "mov", 16,
2083 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2084 },
2085/* movb [$sr],$drb */
2086 {
2087 XC16X_INSN_MOVBRI2, "movbri2", "movb", 16,
2088 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2089 },
2090/* mov [-$sr],$dr */
2091 {
2092 XC16X_INSN_MOVRI3, "movri3", "mov", 16,
2093 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2094 },
2095/* movb [-$sr],$drb */
2096 {
2097 XC16X_INSN_MOVBRI3, "movbri3", "movb", 16,
2098 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2099 },
2100/* mov $dr,[$sr+] */
2101 {
2102 XC16X_INSN_MOV2I, "mov2i", "mov", 16,
2103 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2104 },
2105/* movb $drb,[$sr+] */
2106 {
2107 XC16X_INSN_MOVB2I, "movb2i", "movb", 16,
2108 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2109 },
2110/* mov [$dr],[$sr] */
2111 {
2112 XC16X_INSN_MOV6I, "mov6i", "mov", 16,
2113 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2114 },
2115/* movb [$dr],[$sr] */
2116 {
2117 XC16X_INSN_MOVB6I, "movb6i", "movb", 16,
2118 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2119 },
2120/* mov [$dr+],[$sr] */
2121 {
2122 XC16X_INSN_MOV7I, "mov7i", "mov", 16,
2123 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2124 },
2125/* movb [$dr+],[$sr] */
2126 {
2127 XC16X_INSN_MOVB7I, "movb7i", "movb", 16,
2128 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2129 },
2130/* mov [$dr],[$sr+] */
2131 {
2132 XC16X_INSN_MOV8I, "mov8i", "mov", 16,
2133 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2134 },
2135/* movb [$dr],[$sr+] */
2136 {
2137 XC16X_INSN_MOVB8I, "movb8i", "movb", 16,
2138 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2139 },
2140/* mov $dr,[$sr+$hash$uimm16] */
2141 {
2142 XC16X_INSN_MOV9I, "mov9i", "mov", 32,
2143 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2144 },
2145/* movb $drb,[$sr+$hash$uimm16] */
2146 {
2147 XC16X_INSN_MOVB9I, "movb9i", "movb", 32,
2148 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2149 },
2150/* mov [$sr+$hash$uimm16],$dr */
2151 {
2152 XC16X_INSN_MOV10I, "mov10i", "mov", 32,
2153 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2154 },
2155/* movb [$sr+$hash$uimm16],$drb */
2156 {
2157 XC16X_INSN_MOVB10I, "movb10i", "movb", 32,
2158 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2159 },
2160/* mov [$src2],$memory */
2161 {
2162 XC16X_INSN_MOVRI11, "movri11", "mov", 32,
2163 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2164 },
2165/* movb [$src2],$memory */
2166 {
2167 XC16X_INSN_MOVBRI11, "movbri11", "movb", 32,
2168 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2169 },
2170/* mov $memory,[$src2] */
2171 {
2172 XC16X_INSN_MOVRI12, "movri12", "mov", 32,
2173 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2174 },
2175/* movb $memory,[$src2] */
2176 {
2177 XC16X_INSN_MOVBRI12, "movbri12", "movb", 32,
2178 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2179 },
2180/* mov $regoff8,$hash$pof$upof16 */
2181 {
2182 XC16X_INSN_MOVEHM5, "movehm5", "mov", 32,
2183 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2184 },
2185/* mov $regoff8,$hash$pag$upag16 */
2186 {
2187 XC16X_INSN_MOVEHM6, "movehm6", "mov", 32,
2188 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2189 },
2190/* mov $regoff8,$hash$segm$useg16 */
2191 {
2192 XC16X_INSN_MOVEHM7, "movehm7", "mov", 32,
2193 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2194 },
2195/* mov $regoff8,$hash$sof$usof16 */
2196 {
2197 XC16X_INSN_MOVEHM8, "movehm8", "mov", 32,
2198 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2199 },
2200/* movb $regb8,$hash$pof$uimm8 */
2201 {
2202 XC16X_INSN_MOVEHM9, "movehm9", "movb", 32,
2203 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2204 },
2205/* movb $regoff8,$hash$pag$uimm8 */
2206 {
2207 XC16X_INSN_MOVEHM10, "movehm10", "movb", 32,
2208 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2209 },
2210/* mov $regoff8,$pof$upof16 */
2211 {
2212 XC16X_INSN_MOVRMP, "movrmp", "mov", 32,
2213 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2214 },
2215/* movb $regb8,$pof$upof16 */
2216 {
2217 XC16X_INSN_MOVRMP1, "movrmp1", "movb", 32,
2218 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2219 },
2220/* mov $regoff8,$pag$upag16 */
2221 {
2222 XC16X_INSN_MOVRMP2, "movrmp2", "mov", 32,
2223 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2224 },
2225/* movb $regb8,$pag$upag16 */
2226 {
2227 XC16X_INSN_MOVRMP3, "movrmp3", "movb", 32,
2228 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2229 },
2230/* mov $pof$upof16,$regoff8 */
2231 {
2232 XC16X_INSN_MOVRMP4, "movrmp4", "mov", 32,
2233 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2234 },
2235/* movb $pof$upof16,$regb8 */
2236 {
2237 XC16X_INSN_MOVRMP5, "movrmp5", "movb", 32,
2238 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2239 },
2240/* mov $dri,$hash$pof$u4 */
2241 {
2242 XC16X_INSN_MOVEHM1, "movehm1", "mov", 16,
2243 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2244 },
2245/* movb $srb,$hash$pof$u4 */
2246 {
2247 XC16X_INSN_MOVEHM2, "movehm2", "movb", 16,
2248 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2249 },
2250/* mov $dri,$hash$pag$u4 */
2251 {
2252 XC16X_INSN_MOVEHM3, "movehm3", "mov", 16,
2253 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2254 },
2255/* movb $srb,$hash$pag$u4 */
2256 {
2257 XC16X_INSN_MOVEHM4, "movehm4", "movb", 16,
2258 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2259 },
2260/* mov $regmem8,$memgr8 */
2261 {
2262 XC16X_INSN_MVE12, "mve12", "mov", 32,
2263 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2264 },
2265/* mov $memgr8,$regmem8 */
2266 {
2267 XC16X_INSN_MVE13, "mve13", "mov", 32,
2268 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2269 },
2270/* mov $reg8,$memory */
2271 {
2272 XC16X_INSN_MOVER12, "mover12", "mov", 32,
2273 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2274 },
2275/* mov $memory,$reg8 */
2276 {
2277 XC16X_INSN_MVR13, "mvr13", "mov", 32,
2278 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2279 },
2280/* movb $regbmem8,$memgr8 */
2281 {
2282 XC16X_INSN_MVER12, "mver12", "movb", 32,
2283 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2284 },
2285/* movb $memgr8,$regbmem8 */
2286 {
2287 XC16X_INSN_MVER13, "mver13", "movb", 32,
2288 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2289 },
2290/* movb $regb8,$memory */
2291 {
2292 XC16X_INSN_MOVR12, "movr12", "movb", 32,
2293 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2294 },
2295/* movb $memory,$regb8 */
2296 {
2297 XC16X_INSN_MOVR13, "movr13", "movb", 32,
2298 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2299 },
2300/* movbs $sr,$drb */
2301 {
2302 XC16X_INSN_MOVBSRR, "movbsrr", "movbs", 16,
2303 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2304 },
2305/* movbz $sr,$drb */
2306 {
2307 XC16X_INSN_MOVBZRR, "movbzrr", "movbz", 16,
2308 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2309 },
2310/* movbs $regmem8,$pof$upof16 */
2311 {
2312 XC16X_INSN_MOVBSRPOFM, "movbsrpofm", "movbs", 32,
2313 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2314 },
2315/* movbs $pof$upof16,$regbmem8 */
2316 {
2317 XC16X_INSN_MOVBSPOFMR, "movbspofmr", "movbs", 32,
2318 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2319 },
2320/* movbz $reg8,$pof$upof16 */
2321 {
2322 XC16X_INSN_MOVBZRPOFM, "movbzrpofm", "movbz", 32,
2323 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2324 },
2325/* movbz $pof$upof16,$regb8 */
2326 {
2327 XC16X_INSN_MOVBZPOFMR, "movbzpofmr", "movbz", 32,
2328 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2329 },
2330/* movbs $regmem8,$memgr8 */
2331 {
2332 XC16X_INSN_MOVEBS14, "movebs14", "movbs", 32,
2333 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2334 },
2335/* movbs $memgr8,$regbmem8 */
2336 {
2337 XC16X_INSN_MOVEBS15, "movebs15", "movbs", 32,
2338 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2339 },
2340/* movbs $reg8,$memory */
2341 {
2342 XC16X_INSN_MOVERBS14, "moverbs14", "movbs", 32,
2343 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2344 },
2345/* movbs $memory,$regb8 */
2346 {
2347 XC16X_INSN_MOVRBS15, "movrbs15", "movbs", 32,
2348 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2349 },
2350/* movbz $regmem8,$memgr8 */
2351 {
2352 XC16X_INSN_MOVEBZ14, "movebz14", "movbz", 32,
2353 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2354 },
2355/* movbz $memgr8,$regbmem8 */
2356 {
2357 XC16X_INSN_MOVEBZ15, "movebz15", "movbz", 32,
2358 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2359 },
2360/* movbz $reg8,$memory */
2361 {
2362 XC16X_INSN_MOVERBZ14, "moverbz14", "movbz", 32,
2363 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2364 },
2365/* movbz $memory,$regb8 */
2366 {
2367 XC16X_INSN_MOVRBZ15, "movrbz15", "movbz", 32,
2368 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2369 },
2370/* movbs $sr,$drb */
2371 {
2372 XC16X_INSN_MOVRBS, "movrbs", "movbs", 16,
2373 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2374 },
2375/* movbz $sr,$drb */
2376 {
2377 XC16X_INSN_MOVRBZ, "movrbz", "movbz", 16,
2378 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2379 },
2380/* jmpa+ $extcond,$caddr */
2381 {
2382 XC16X_INSN_JMPA0, "jmpa0", "jmpa+", 32,
2383 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2384 },
2385/* jmpa $extcond,$caddr */
2386 {
2387 XC16X_INSN_JMPA1, "jmpa1", "jmpa", 32,
2388 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2389 },
2390/* jmpa- $extcond,$caddr */
2391 {
2392 XC16X_INSN_JMPA_, "jmpa-", "jmpa-", 32,
2393 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2394 },
2395/* jmpi $icond,[$sr] */
2396 {
2397 XC16X_INSN_JMPI, "jmpi", "jmpi", 16,
2398 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2399 },
2400/* jmpr $cond,$rel */
2401 {
2402 XC16X_INSN_JMPR_NENZ, "jmpr_nenz", "jmpr", 16,
2403 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2404 },
2405/* jmpr $cond,$rel */
2406 {
2407 XC16X_INSN_JMPR_SGT, "jmpr_sgt", "jmpr", 16,
2408 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2409 },
2410/* jmpr $cond,$rel */
2411 {
2412 XC16X_INSN_JMPR_Z, "jmpr_z", "jmpr", 16,
2413 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2414 },
2415/* jmpr $cond,$rel */
2416 {
2417 XC16X_INSN_JMPR_V, "jmpr_v", "jmpr", 16,
2418 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2419 },
2420/* jmpr $cond,$rel */
2421 {
2422 XC16X_INSN_JMPR_NV, "jmpr_nv", "jmpr", 16,
2423 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2424 },
2425/* jmpr $cond,$rel */
2426 {
2427 XC16X_INSN_JMPR_N, "jmpr_n", "jmpr", 16,
2428 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2429 },
2430/* jmpr $cond,$rel */
2431 {
2432 XC16X_INSN_JMPR_NN, "jmpr_nn", "jmpr", 16,
2433 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2434 },
2435/* jmpr $cond,$rel */
2436 {
2437 XC16X_INSN_JMPR_C, "jmpr_c", "jmpr", 16,
2438 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2439 },
2440/* jmpr $cond,$rel */
2441 {
2442 XC16X_INSN_JMPR_NC, "jmpr_nc", "jmpr", 16,
2443 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2444 },
2445/* jmpr $cond,$rel */
2446 {
2447 XC16X_INSN_JMPR_EQ, "jmpr_eq", "jmpr", 16,
2448 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2449 },
2450/* jmpr $cond,$rel */
2451 {
2452 XC16X_INSN_JMPR_NE, "jmpr_ne", "jmpr", 16,
2453 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2454 },
2455/* jmpr $cond,$rel */
2456 {
2457 XC16X_INSN_JMPR_ULT, "jmpr_ult", "jmpr", 16,
2458 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2459 },
2460/* jmpr $cond,$rel */
2461 {
2462 XC16X_INSN_JMPR_ULE, "jmpr_ule", "jmpr", 16,
2463 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2464 },
2465/* jmpr $cond,$rel */
2466 {
2467 XC16X_INSN_JMPR_UGE, "jmpr_uge", "jmpr", 16,
2468 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2469 },
2470/* jmpr $cond,$rel */
2471 {
2472 XC16X_INSN_JMPR_UGT, "jmpr_ugt", "jmpr", 16,
2473 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2474 },
2475/* jmpr $cond,$rel */
2476 {
2477 XC16X_INSN_JMPR_SLE, "jmpr_sle", "jmpr", 16,
2478 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2479 },
2480/* jmpr $cond,$rel */
2481 {
2482 XC16X_INSN_JMPR_SGE, "jmpr_sge", "jmpr", 16,
2483 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2484 },
2485/* jmpr $cond,$rel */
2486 {
2487 XC16X_INSN_JMPR_NET, "jmpr_net", "jmpr", 16,
2488 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2489 },
2490/* jmpr $cond,$rel */
2491 {
2492 XC16X_INSN_JMPR_UC, "jmpr_uc", "jmpr", 16,
2493 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2494 },
2495/* jmpr $cond,$rel */
2496 {
2497 XC16X_INSN_JMPR_SLT, "jmpr_slt", "jmpr", 16,
2498 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2499 },
2500/* jmps $hash$segm$useg8,$hash$sof$usof16 */
2501 {
2502 XC16X_INSN_JMPSEG, "jmpseg", "jmps", 32,
2503 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2504 },
2505/* jmps $seg,$caddr */
2506 {
2507 XC16X_INSN_JMPS, "jmps", "jmps", 32,
2508 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2509 },
2510/* jb $genreg$dot$qlobit,$relhi */
2511 {
2512 XC16X_INSN_JB, "jb", "jb", 32,
2513 { 0|A(UNCOND_CTI)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2514 },
2515/* jbc $genreg$dot$qlobit,$relhi */
2516 {
2517 XC16X_INSN_JBC, "jbc", "jbc", 32,
2518 { 0|A(UNCOND_CTI)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2519 },
2520/* jnb $genreg$dot$qlobit,$relhi */
2521 {
2522 XC16X_INSN_JNB, "jnb", "jnb", 32,
2523 { 0|A(UNCOND_CTI)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2524 },
2525/* jnbs $genreg$dot$qlobit,$relhi */
2526 {
2527 XC16X_INSN_JNBS, "jnbs", "jnbs", 32,
2528 { 0|A(UNCOND_CTI)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2529 },
2530/* calla+ $extcond,$caddr */
2531 {
2532 XC16X_INSN_CALLA0, "calla0", "calla+", 32,
2533 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2534 },
2535/* calla $extcond,$caddr */
2536 {
2537 XC16X_INSN_CALLA1, "calla1", "calla", 32,
2538 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2539 },
2540/* calla- $extcond,$caddr */
2541 {
2542 XC16X_INSN_CALLA_, "calla-", "calla-", 32,
2543 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2544 },
2545/* calli $icond,[$sr] */
2546 {
2547 XC16X_INSN_CALLI, "calli", "calli", 16,
2548 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2549 },
2550/* callr $rel */
2551 {
2552 XC16X_INSN_CALLR, "callr", "callr", 16,
2553 { 0|A(COND_CTI)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2554 },
2555/* calls $hash$segm$useg8,$hash$sof$usof16 */
2556 {
2557 XC16X_INSN_CALLSEG, "callseg", "calls", 32,
2558 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2559 },
2560/* calls $seg,$caddr */
2561 {
2562 XC16X_INSN_CALLS, "calls", "calls", 32,
2563 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2564 },
2565/* pcall $reg8,$caddr */
2566 {
2567 XC16X_INSN_PCALL, "pcall", "pcall", 32,
2568 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2569 },
2570/* trap $hash$uimm7 */
2571 {
2572 XC16X_INSN_TRAP, "trap", "trap", 16,
2573 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2574 },
2575/* ret */
2576 {
2577 XC16X_INSN_RET, "ret", "ret", 16,
2578 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2579 },
2580/* rets */
2581 {
2582 XC16X_INSN_RETS, "rets", "rets", 16,
2583 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2584 },
2585/* retp $reg8 */
2586 {
2587 XC16X_INSN_RETP, "retp", "retp", 16,
2588 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2589 },
2590/* reti */
2591 {
2592 XC16X_INSN_RETI, "reti", "reti", 16,
2593 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2594 },
2595/* pop $reg8 */
2596 {
2597 XC16X_INSN_POP, "pop", "pop", 16,
2598 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2599 },
2600/* push $reg8 */
2601 {
2602 XC16X_INSN_PUSH, "push", "push", 16,
2603 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2604 },
2605/* scxt $reg8,$hash$uimm16 */
2606 {
2607 XC16X_INSN_SCXTI, "scxti", "scxt", 32,
2608 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2609 },
2610/* scxt $reg8,$pof$upof16 */
2611 {
2612 XC16X_INSN_SCXTRPOFM, "scxtrpofm", "scxt", 32,
2613 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2614 },
2615/* scxt $regmem8,$memgr8 */
2616 {
2617 XC16X_INSN_SCXTMG, "scxtmg", "scxt", 32,
2618 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2619 },
2620/* scxt $reg8,$memory */
2621 {
2622 XC16X_INSN_SCXTM, "scxtm", "scxt", 32,
2623 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2624 },
2625/* nop */
2626 {
2627 XC16X_INSN_NOP, "nop", "nop", 16,
2628 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2629 },
2630/* srst */
2631 {
2632 XC16X_INSN_SRSTM, "srstm", "srst", 32,
2633 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2634 },
2635/* idle */
2636 {
2637 XC16X_INSN_IDLEM, "idlem", "idle", 32,
2638 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2639 },
2640/* pwrdn */
2641 {
2642 XC16X_INSN_PWRDNM, "pwrdnm", "pwrdn", 32,
2643 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2644 },
2645/* diswdt */
2646 {
2647 XC16X_INSN_DISWDTM, "diswdtm", "diswdt", 32,
2648 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2649 },
2650/* enwdt */
2651 {
2652 XC16X_INSN_ENWDTM, "enwdtm", "enwdt", 32,
2653 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2654 },
2655/* einit */
2656 {
2657 XC16X_INSN_EINITM, "einitm", "einit", 32,
2658 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2659 },
2660/* srvwdt */
2661 {
2662 XC16X_INSN_SRVWDTM, "srvwdtm", "srvwdt", 32,
2663 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2664 },
2665/* sbrk */
2666 {
2667 XC16X_INSN_SBRK, "sbrk", "sbrk", 16,
2668 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2669 },
2670/* atomic $hash$uimm2 */
2671 {
2672 XC16X_INSN_ATOMIC, "atomic", "atomic", 16,
2673 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2674 },
2675/* extr $hash$uimm2 */
2676 {
2677 XC16X_INSN_EXTR, "extr", "extr", 16,
2678 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2679 },
2680/* extp $sr,$hash$uimm2 */
2681 {
2682 XC16X_INSN_EXTP, "extp", "extp", 16,
2683 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2684 },
2685/* extp $hash$pagenum,$hash$uimm2 */
2686 {
2687 XC16X_INSN_EXTP1, "extp1", "extp", 32,
2688 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2689 },
2690/* extp $hash$pag$upag16,$hash$uimm2 */
2691 {
2692 XC16X_INSN_EXTPG1, "extpg1", "extp", 32,
2693 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2694 },
2695/* extpr $sr,$hash$uimm2 */
2696 {
2697 XC16X_INSN_EXTPR, "extpr", "extpr", 16,
2698 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2699 },
2700/* extpr $hash$pagenum,$hash$uimm2 */
2701 {
2702 XC16X_INSN_EXTPR1, "extpr1", "extpr", 32,
2703 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2704 },
2705/* exts $sr,$hash$uimm2 */
2706 {
2707 XC16X_INSN_EXTS, "exts", "exts", 16,
2708 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2709 },
2710/* exts $hash$seghi8,$hash$uimm2 */
2711 {
2712 XC16X_INSN_EXTS1, "exts1", "exts", 32,
2713 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2714 },
2715/* extsr $sr,$hash$uimm2 */
2716 {
2717 XC16X_INSN_EXTSR, "extsr", "extsr", 16,
2718 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2719 },
2720/* extsr $hash$seghi8,$hash$uimm2 */
2721 {
2722 XC16X_INSN_EXTSR1, "extsr1", "extsr", 32,
2723 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2724 },
2725/* prior $dr,$sr */
2726 {
2727 XC16X_INSN_PRIOR, "prior", "prior", 16,
2728 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2729 },
2730/* bclr $RegNam */
2731 {
2732 XC16X_INSN_BCLR18, "bclr18", "bclr", 16,
2733 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2734 },
2735/* bclr $reg8$dot$qbit */
2736 {
2737 XC16X_INSN_BCLR0, "bclr0", "bclr", 16,
2738 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2739 },
2740/* bclr $reg8$dot$qbit */
2741 {
2742 XC16X_INSN_BCLR1, "bclr1", "bclr", 16,
2743 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2744 },
2745/* bclr $reg8$dot$qbit */
2746 {
2747 XC16X_INSN_BCLR2, "bclr2", "bclr", 16,
2748 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2749 },
2750/* bclr $reg8$dot$qbit */
2751 {
2752 XC16X_INSN_BCLR3, "bclr3", "bclr", 16,
2753 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2754 },
2755/* bclr $reg8$dot$qbit */
2756 {
2757 XC16X_INSN_BCLR4, "bclr4", "bclr", 16,
2758 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2759 },
2760/* bclr $reg8$dot$qbit */
2761 {
2762 XC16X_INSN_BCLR5, "bclr5", "bclr", 16,
2763 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2764 },
2765/* bclr $reg8$dot$qbit */
2766 {
2767 XC16X_INSN_BCLR6, "bclr6", "bclr", 16,
2768 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2769 },
2770/* bclr $reg8$dot$qbit */
2771 {
2772 XC16X_INSN_BCLR7, "bclr7", "bclr", 16,
2773 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2774 },
2775/* bclr $reg8$dot$qbit */
2776 {
2777 XC16X_INSN_BCLR8, "bclr8", "bclr", 16,
2778 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2779 },
2780/* bclr $reg8$dot$qbit */
2781 {
2782 XC16X_INSN_BCLR9, "bclr9", "bclr", 16,
2783 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2784 },
2785/* bclr $reg8$dot$qbit */
2786 {
2787 XC16X_INSN_BCLR10, "bclr10", "bclr", 16,
2788 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2789 },
2790/* bclr $reg8$dot$qbit */
2791 {
2792 XC16X_INSN_BCLR11, "bclr11", "bclr", 16,
2793 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2794 },
2795/* bclr $reg8$dot$qbit */
2796 {
2797 XC16X_INSN_BCLR12, "bclr12", "bclr", 16,
2798 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2799 },
2800/* bclr $reg8$dot$qbit */
2801 {
2802 XC16X_INSN_BCLR13, "bclr13", "bclr", 16,
2803 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2804 },
2805/* bclr $reg8$dot$qbit */
2806 {
2807 XC16X_INSN_BCLR14, "bclr14", "bclr", 16,
2808 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2809 },
2810/* bclr $reg8$dot$qbit */
2811 {
2812 XC16X_INSN_BCLR15, "bclr15", "bclr", 16,
2813 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2814 },
2815/* bset $RegNam */
2816 {
2817 XC16X_INSN_BSET19, "bset19", "bset", 16,
2818 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2819 },
2820/* bset $reg8$dot$qbit */
2821 {
2822 XC16X_INSN_BSET0, "bset0", "bset", 16,
2823 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2824 },
2825/* bset $reg8$dot$qbit */
2826 {
2827 XC16X_INSN_BSET1, "bset1", "bset", 16,
2828 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2829 },
2830/* bset $reg8$dot$qbit */
2831 {
2832 XC16X_INSN_BSET2, "bset2", "bset", 16,
2833 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2834 },
2835/* bset $reg8$dot$qbit */
2836 {
2837 XC16X_INSN_BSET3, "bset3", "bset", 16,
2838 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2839 },
2840/* bset $reg8$dot$qbit */
2841 {
2842 XC16X_INSN_BSET4, "bset4", "bset", 16,
2843 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2844 },
2845/* bset $reg8$dot$qbit */
2846 {
2847 XC16X_INSN_BSET5, "bset5", "bset", 16,
2848 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2849 },
2850/* bset $reg8$dot$qbit */
2851 {
2852 XC16X_INSN_BSET6, "bset6", "bset", 16,
2853 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2854 },
2855/* bset $reg8$dot$qbit */
2856 {
2857 XC16X_INSN_BSET7, "bset7", "bset", 16,
2858 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2859 },
2860/* bset $reg8$dot$qbit */
2861 {
2862 XC16X_INSN_BSET8, "bset8", "bset", 16,
2863 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2864 },
2865/* bset $reg8$dot$qbit */
2866 {
2867 XC16X_INSN_BSET9, "bset9", "bset", 16,
2868 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2869 },
2870/* bset $reg8$dot$qbit */
2871 {
2872 XC16X_INSN_BSET10, "bset10", "bset", 16,
2873 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2874 },
2875/* bset $reg8$dot$qbit */
2876 {
2877 XC16X_INSN_BSET11, "bset11", "bset", 16,
2878 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2879 },
2880/* bset $reg8$dot$qbit */
2881 {
2882 XC16X_INSN_BSET12, "bset12", "bset", 16,
2883 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2884 },
2885/* bset $reg8$dot$qbit */
2886 {
2887 XC16X_INSN_BSET13, "bset13", "bset", 16,
2888 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2889 },
2890/* bset $reg8$dot$qbit */
2891 {
2892 XC16X_INSN_BSET14, "bset14", "bset", 16,
2893 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2894 },
2895/* bset $reg8$dot$qbit */
2896 {
2897 XC16X_INSN_BSET15, "bset15", "bset", 16,
2898 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2899 },
2900/* bmov $reghi8$dot$qhibit,$reg8$dot$qlobit */
2901 {
2902 XC16X_INSN_BMOV, "bmov", "bmov", 32,
2903 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2904 },
2905/* bmovn $reghi8$dot$qhibit,$reg8$dot$qlobit */
2906 {
2907 XC16X_INSN_BMOVN, "bmovn", "bmovn", 32,
2908 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2909 },
2910/* band $reghi8$dot$qhibit,$reg8$dot$qlobit */
2911 {
2912 XC16X_INSN_BAND, "band", "band", 32,
2913 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2914 },
2915/* bor $reghi8$dot$qhibit,$reg8$dot$qlobit */
2916 {
2917 XC16X_INSN_BOR, "bor", "bor", 32,
2918 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2919 },
2920/* bxor $reghi8$dot$qhibit,$reg8$dot$qlobit */
2921 {
2922 XC16X_INSN_BXOR, "bxor", "bxor", 32,
2923 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2924 },
2925/* bcmp $reghi8$dot$qhibit,$reg8$dot$qlobit */
2926 {
2927 XC16X_INSN_BCMP, "bcmp", "bcmp", 32,
2928 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2929 },
2930/* bfldl $reg8,$hash$mask8,$hash$datahi8 */
2931 {
2932 XC16X_INSN_BFLDL, "bfldl", "bfldl", 32,
2933 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2934 },
2935/* bfldh $reg8,$hash$masklo8,$hash$data8 */
2936 {
2937 XC16X_INSN_BFLDH, "bfldh", "bfldh", 32,
2938 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2939 },
2940/* cmp $src1,$src2 */
2941 {
2942 XC16X_INSN_CMPR, "cmpr", "cmp", 16,
2943 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2944 },
2945/* cmpb $drb,$srb */
2946 {
2947 XC16X_INSN_CMPBR, "cmpbr", "cmpb", 16,
2948 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2949 },
2950/* cmp $src1,$hash$uimm3 */
2951 {
2952 XC16X_INSN_CMPRI, "cmpri", "cmp", 16,
2953 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2954 },
2955/* cmpb $drb,$hash$uimm3 */
2956 {
2957 XC16X_INSN_CMPBRI, "cmpbri", "cmpb", 16,
2958 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2959 },
2960/* cmp $reg8,$hash$uimm16 */
2961 {
2962 XC16X_INSN_CMPI, "cmpi", "cmp", 32,
2963 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2964 },
2965/* cmpb $regb8,$hash$uimm8 */
2966 {
2967 XC16X_INSN_CMPBI, "cmpbi", "cmpb", 32,
2968 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2969 },
2970/* cmp $dr,[$sr2] */
2971 {
2972 XC16X_INSN_CMPR2, "cmpr2", "cmp", 16,
2973 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2974 },
2975/* cmpb $drb,[$sr2] */
2976 {
2977 XC16X_INSN_CMPBR2, "cmpbr2", "cmpb", 16,
2978 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2979 },
2980/* cmp $dr,[$sr2+] */
2981 {
2982 XC16X_INSN_CMP2I, "cmp2i", "cmp", 16,
2983 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2984 },
2985/* cmpb $drb,[$sr2+] */
2986 {
2987 XC16X_INSN_CMPB2I, "cmpb2i", "cmpb", 16,
2988 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2989 },
2990/* cmp $reg8,$pof$upof16 */
2991 {
2992 XC16X_INSN_CMP04, "cmp04", "cmp", 32,
2993 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2994 },
2995/* cmpb $regb8,$pof$upof16 */
2996 {
2997 XC16X_INSN_CMPB4, "cmpb4", "cmpb", 32,
2998 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
2999 },
3000/* cmp $regmem8,$memgr8 */
3001 {
3002 XC16X_INSN_CMP004, "cmp004", "cmp", 32,
3003 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3004 },
3005/* cmp $reg8,$memory */
3006 {
3007 XC16X_INSN_CMP0004, "cmp0004", "cmp", 32,
3008 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3009 },
3010/* cmpb $regbmem8,$memgr8 */
3011 {
3012 XC16X_INSN_CMPB04, "cmpb04", "cmpb", 32,
3013 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3014 },
3015/* cmpb $regb8,$memory */
3016 {
3017 XC16X_INSN_CMPB004, "cmpb004", "cmpb", 32,
3018 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3019 },
3020/* cmpd1 $sr,$hash$uimm4 */
3021 {
3022 XC16X_INSN_CMPD1RI, "cmpd1ri", "cmpd1", 16,
3023 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3024 },
3025/* cmpd2 $sr,$hash$uimm4 */
3026 {
3027 XC16X_INSN_CMPD2RI, "cmpd2ri", "cmpd2", 16,
3028 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3029 },
3030/* cmpi1 $sr,$hash$uimm4 */
3031 {
3032 XC16X_INSN_CMPI1RI, "cmpi1ri", "cmpi1", 16,
3033 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3034 },
3035/* cmpi2 $sr,$hash$uimm4 */
3036 {
3037 XC16X_INSN_CMPI2RI, "cmpi2ri", "cmpi2", 16,
3038 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3039 },
3040/* cmpd1 $reg8,$hash$uimm16 */
3041 {
3042 XC16X_INSN_CMPD1RIM, "cmpd1rim", "cmpd1", 32,
3043 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3044 },
3045/* cmpd2 $reg8,$hash$uimm16 */
3046 {
3047 XC16X_INSN_CMPD2RIM, "cmpd2rim", "cmpd2", 32,
3048 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3049 },
3050/* cmpi1 $reg8,$hash$uimm16 */
3051 {
3052 XC16X_INSN_CMPI1RIM, "cmpi1rim", "cmpi1", 32,
3053 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3054 },
3055/* cmpi2 $reg8,$hash$uimm16 */
3056 {
3057 XC16X_INSN_CMPI2RIM, "cmpi2rim", "cmpi2", 32,
3058 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3059 },
3060/* cmpd1 $reg8,$pof$upof16 */
3061 {
3062 XC16X_INSN_CMPD1RP, "cmpd1rp", "cmpd1", 32,
3063 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3064 },
3065/* cmpd2 $reg8,$pof$upof16 */
3066 {
3067 XC16X_INSN_CMPD2RP, "cmpd2rp", "cmpd2", 32,
3068 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3069 },
3070/* cmpi1 $reg8,$pof$upof16 */
3071 {
3072 XC16X_INSN_CMPI1RP, "cmpi1rp", "cmpi1", 32,
3073 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3074 },
3075/* cmpi2 $reg8,$pof$upof16 */
3076 {
3077 XC16X_INSN_CMPI2RP, "cmpi2rp", "cmpi2", 32,
3078 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3079 },
3080/* cmpd1 $regmem8,$memgr8 */
3081 {
3082 XC16X_INSN_CMPD1RM, "cmpd1rm", "cmpd1", 32,
3083 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3084 },
3085/* cmpd2 $regmem8,$memgr8 */
3086 {
3087 XC16X_INSN_CMPD2RM, "cmpd2rm", "cmpd2", 32,
3088 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3089 },
3090/* cmpi1 $regmem8,$memgr8 */
3091 {
3092 XC16X_INSN_CMPI1RM, "cmpi1rm", "cmpi1", 32,
3093 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3094 },
3095/* cmpi2 $regmem8,$memgr8 */
3096 {
3097 XC16X_INSN_CMPI2RM, "cmpi2rm", "cmpi2", 32,
3098 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3099 },
3100/* cmpd1 $reg8,$memory */
3101 {
3102 XC16X_INSN_CMPD1RMI, "cmpd1rmi", "cmpd1", 32,
3103 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3104 },
3105/* cmpd2 $reg8,$memory */
3106 {
3107 XC16X_INSN_CMPD2RMI, "cmpd2rmi", "cmpd2", 32,
3108 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3109 },
3110/* cmpi1 $reg8,$memory */
3111 {
3112 XC16X_INSN_CMPI1RMI, "cmpi1rmi", "cmpi1", 32,
3113 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3114 },
3115/* cmpi2 $reg8,$memory */
3116 {
3117 XC16X_INSN_CMPI2RMI, "cmpi2rmi", "cmpi2", 32,
3118 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3119 },
3120/* shl $dr,$sr */
3121 {
3122 XC16X_INSN_SHLR, "shlr", "shl", 16,
3123 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3124 },
3125/* shr $dr,$sr */
3126 {
3127 XC16X_INSN_SHRR, "shrr", "shr", 16,
3128 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3129 },
3130/* rol $dr,$sr */
3131 {
3132 XC16X_INSN_ROLR, "rolr", "rol", 16,
3133 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3134 },
3135/* ror $dr,$sr */
3136 {
3137 XC16X_INSN_RORR, "rorr", "ror", 16,
3138 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3139 },
3140/* ashr $dr,$sr */
3141 {
3142 XC16X_INSN_ASHRR, "ashrr", "ashr", 16,
3143 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3144 },
3145/* shl $sr,$hash$uimm4 */
3146 {
3147 XC16X_INSN_SHLRI, "shlri", "shl", 16,
3148 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3149 },
3150/* shr $sr,$hash$uimm4 */
3151 {
3152 XC16X_INSN_SHRRI, "shrri", "shr", 16,
3153 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3154 },
3155/* rol $sr,$hash$uimm4 */
3156 {
3157 XC16X_INSN_ROLRI, "rolri", "rol", 16,
3158 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3159 },
3160/* ror $sr,$hash$uimm4 */
3161 {
3162 XC16X_INSN_RORRI, "rorri", "ror", 16,
3163 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3164 },
3165/* ashr $sr,$hash$uimm4 */
3166 {
3167 XC16X_INSN_ASHRRI, "ashrri", "ashr", 16,
3168 { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
3169 },
3170};
3171
3172#undef OP
3173#undef A
3174
3175/* Initialize anything needed to be done once, before any cpu_open call. */
3176
3177static void
3178init_tables (void)
3179{
3180}
3181
a6743a54
AM
3182#ifndef opcodes_error_handler
3183#define opcodes_error_handler(...) \
3184 fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
3185#endif
3186
d70c5fc7
NC
3187static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
3188static void build_hw_table (CGEN_CPU_TABLE *);
3189static void build_ifield_table (CGEN_CPU_TABLE *);
3190static void build_operand_table (CGEN_CPU_TABLE *);
3191static void build_insn_table (CGEN_CPU_TABLE *);
3192static void xc16x_cgen_rebuild_tables (CGEN_CPU_TABLE *);
3193
3194/* Subroutine of xc16x_cgen_cpu_open to look up a mach via its bfd name. */
3195
3196static const CGEN_MACH *
3197lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
3198{
3199 while (table->name)
3200 {
3201 if (strcmp (name, table->bfd_name) == 0)
3202 return table;
3203 ++table;
3204 }
42742084 3205 return NULL;
d70c5fc7
NC
3206}
3207
3208/* Subroutine of xc16x_cgen_cpu_open to build the hardware table. */
3209
3210static void
3211build_hw_table (CGEN_CPU_TABLE *cd)
3212{
3213 int i;
3214 int machs = cd->machs;
3215 const CGEN_HW_ENTRY *init = & xc16x_cgen_hw_table[0];
3216 /* MAX_HW is only an upper bound on the number of selected entries.
3217 However each entry is indexed by it's enum so there can be holes in
3218 the table. */
3219 const CGEN_HW_ENTRY **selected =
3220 (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
3221
3222 cd->hw_table.init_entries = init;
3223 cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
3224 memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
3225 /* ??? For now we just use machs to determine which ones we want. */
3226 for (i = 0; init[i].name != NULL; ++i)
3227 if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
3228 & machs)
3229 selected[init[i].type] = &init[i];
3230 cd->hw_table.entries = selected;
3231 cd->hw_table.num_entries = MAX_HW;
3232}
3233
3234/* Subroutine of xc16x_cgen_cpu_open to build the hardware table. */
3235
3236static void
3237build_ifield_table (CGEN_CPU_TABLE *cd)
3238{
3239 cd->ifld_table = & xc16x_cgen_ifld_table[0];
3240}
3241
3242/* Subroutine of xc16x_cgen_cpu_open to build the hardware table. */
3243
3244static void
3245build_operand_table (CGEN_CPU_TABLE *cd)
3246{
3247 int i;
3248 int machs = cd->machs;
3249 const CGEN_OPERAND *init = & xc16x_cgen_operand_table[0];
3250 /* MAX_OPERANDS is only an upper bound on the number of selected entries.
3251 However each entry is indexed by it's enum so there can be holes in
3252 the table. */
3253 const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
3254
3255 cd->operand_table.init_entries = init;
3256 cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
3257 memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
3258 /* ??? For now we just use mach to determine which ones we want. */
3259 for (i = 0; init[i].name != NULL; ++i)
3260 if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
3261 & machs)
3262 selected[init[i].type] = &init[i];
3263 cd->operand_table.entries = selected;
3264 cd->operand_table.num_entries = MAX_OPERANDS;
3265}
3266
3267/* Subroutine of xc16x_cgen_cpu_open to build the hardware table.
3268 ??? This could leave out insns not supported by the specified mach/isa,
3269 but that would cause errors like "foo only supported by bar" to become
3270 "unknown insn", so for now we include all insns and require the app to
3271 do the checking later.
3272 ??? On the other hand, parsing of such insns may require their hardware or
3273 operand elements to be in the table [which they mightn't be]. */
3274
3275static void
3276build_insn_table (CGEN_CPU_TABLE *cd)
3277{
3278 int i;
3279 const CGEN_IBASE *ib = & xc16x_cgen_insn_table[0];
3280 CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
3281
3282 memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
3283 for (i = 0; i < MAX_INSNS; ++i)
3284 insns[i].base = &ib[i];
3285 cd->insn_table.init_entries = insns;
3286 cd->insn_table.entry_size = sizeof (CGEN_IBASE);
3287 cd->insn_table.num_init_entries = MAX_INSNS;
3288}
3289
3290/* Subroutine of xc16x_cgen_cpu_open to rebuild the tables. */
3291
3292static void
3293xc16x_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
3294{
3295 int i;
3296 CGEN_BITSET *isas = cd->isas;
3297 unsigned int machs = cd->machs;
3298
3299 cd->int_insn_p = CGEN_INT_INSN_P;
3300
3301 /* Data derived from the isa spec. */
3302#define UNSET (CGEN_SIZE_UNKNOWN + 1)
3303 cd->default_insn_bitsize = UNSET;
3304 cd->base_insn_bitsize = UNSET;
3305 cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
3306 cd->max_insn_bitsize = 0;
3307 for (i = 0; i < MAX_ISAS; ++i)
3308 if (cgen_bitset_contains (isas, i))
3309 {
3310 const CGEN_ISA *isa = & xc16x_cgen_isa_table[i];
3311
3312 /* Default insn sizes of all selected isas must be
3313 equal or we set the result to 0, meaning "unknown". */
3314 if (cd->default_insn_bitsize == UNSET)
3315 cd->default_insn_bitsize = isa->default_insn_bitsize;
3316 else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
3317 ; /* This is ok. */
3318 else
3319 cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
3320
3321 /* Base insn sizes of all selected isas must be equal
3322 or we set the result to 0, meaning "unknown". */
3323 if (cd->base_insn_bitsize == UNSET)
3324 cd->base_insn_bitsize = isa->base_insn_bitsize;
3325 else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
3326 ; /* This is ok. */
3327 else
3328 cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
3329
3330 /* Set min,max insn sizes. */
3331 if (isa->min_insn_bitsize < cd->min_insn_bitsize)
3332 cd->min_insn_bitsize = isa->min_insn_bitsize;
3333 if (isa->max_insn_bitsize > cd->max_insn_bitsize)
3334 cd->max_insn_bitsize = isa->max_insn_bitsize;
3335 }
3336
3337 /* Data derived from the mach spec. */
3338 for (i = 0; i < MAX_MACHS; ++i)
3339 if (((1 << i) & machs) != 0)
3340 {
3341 const CGEN_MACH *mach = & xc16x_cgen_mach_table[i];
3342
3343 if (mach->insn_chunk_bitsize != 0)
3344 {
3345 if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
3346 {
a6743a54
AM
3347 opcodes_error_handler
3348 (/* xgettext:c-format */
3349 _("internal error: xc16x_cgen_rebuild_tables: "
3350 "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
3351 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
d70c5fc7
NC
3352 abort ();
3353 }
3354
3355 cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
3356 }
3357 }
3358
3359 /* Determine which hw elements are used by MACH. */
3360 build_hw_table (cd);
3361
3362 /* Build the ifield table. */
3363 build_ifield_table (cd);
3364
3365 /* Determine which operands are used by MACH/ISA. */
3366 build_operand_table (cd);
3367
3368 /* Build the instruction table. */
3369 build_insn_table (cd);
3370}
3371
3372/* Initialize a cpu table and return a descriptor.
3373 It's much like opening a file, and must be the first function called.
3374 The arguments are a set of (type/value) pairs, terminated with
3375 CGEN_CPU_OPEN_END.
3376
3377 Currently supported values:
3378 CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
3379 CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
3380 CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
3381 CGEN_CPU_OPEN_ENDIAN: specify endian choice
3382 CGEN_CPU_OPEN_END: terminates arguments
3383
3384 ??? Simultaneous multiple isas might not make sense, but it's not (yet)
37ec9240 3385 precluded. */
d70c5fc7
NC
3386
3387CGEN_CPU_DESC
3388xc16x_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
3389{
3390 CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
3391 static int init_p;
3392 CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
3393 unsigned int machs = 0; /* 0 = "unspecified" */
3394 enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
3395 va_list ap;
3396
3397 if (! init_p)
3398 {
3399 init_tables ();
3400 init_p = 1;
3401 }
3402
3403 memset (cd, 0, sizeof (*cd));
3404
3405 va_start (ap, arg_type);
3406 while (arg_type != CGEN_CPU_OPEN_END)
3407 {
3408 switch (arg_type)
3409 {
3410 case CGEN_CPU_OPEN_ISAS :
3411 isas = va_arg (ap, CGEN_BITSET *);
3412 break;
3413 case CGEN_CPU_OPEN_MACHS :
3414 machs = va_arg (ap, unsigned int);
3415 break;
3416 case CGEN_CPU_OPEN_BFDMACH :
3417 {
3418 const char *name = va_arg (ap, const char *);
3419 const CGEN_MACH *mach =
3420 lookup_mach_via_bfd_name (xc16x_cgen_mach_table, name);
3421
42742084
AM
3422 if (mach != NULL)
3423 machs |= 1 << mach->num;
d70c5fc7
NC
3424 break;
3425 }
3426 case CGEN_CPU_OPEN_ENDIAN :
3427 endian = va_arg (ap, enum cgen_endian);
3428 break;
3429 default :
a6743a54
AM
3430 opcodes_error_handler
3431 (/* xgettext:c-format */
3432 _("internal error: xc16x_cgen_cpu_open: "
3433 "unsupported argument `%d'"),
3434 arg_type);
d70c5fc7
NC
3435 abort (); /* ??? return NULL? */
3436 }
3437 arg_type = va_arg (ap, enum cgen_cpu_open_arg);
3438 }
3439 va_end (ap);
3440
3441 /* Mach unspecified means "all". */
3442 if (machs == 0)
3443 machs = (1 << MAX_MACHS) - 1;
3444 /* Base mach is always selected. */
3445 machs |= 1;
3446 if (endian == CGEN_ENDIAN_UNKNOWN)
3447 {
3448 /* ??? If target has only one, could have a default. */
a6743a54
AM
3449 opcodes_error_handler
3450 (/* xgettext:c-format */
3451 _("internal error: xc16x_cgen_cpu_open: no endianness specified"));
d70c5fc7
NC
3452 abort ();
3453 }
3454
3455 cd->isas = cgen_bitset_copy (isas);
3456 cd->machs = machs;
3457 cd->endian = endian;
3458 /* FIXME: for the sparc case we can determine insn-endianness statically.
3459 The worry here is where both data and insn endian can be independently
3460 chosen, in which case this function will need another argument.
3461 Actually, will want to allow for more arguments in the future anyway. */
3462 cd->insn_endian = endian;
3463
3464 /* Table (re)builder. */
3465 cd->rebuild_tables = xc16x_cgen_rebuild_tables;
3466 xc16x_cgen_rebuild_tables (cd);
3467
3468 /* Default to not allowing signed overflow. */
3469 cd->signed_overflow_ok_p = 0;
43e65147 3470
d70c5fc7
NC
3471 return (CGEN_CPU_DESC) cd;
3472}
3473
3474/* Cover fn to xc16x_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
3475 MACH_NAME is the bfd name of the mach. */
3476
3477CGEN_CPU_DESC
3478xc16x_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
3479{
3480 return xc16x_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
3481 CGEN_CPU_OPEN_ENDIAN, endian,
3482 CGEN_CPU_OPEN_END);
3483}
3484
3485/* Close a cpu table.
3486 ??? This can live in a machine independent file, but there's currently
3487 no place to put this file (there's no libcgen). libopcodes is the wrong
3488 place as some simulator ports use this but they don't use libopcodes. */
3489
3490void
3491xc16x_cgen_cpu_close (CGEN_CPU_DESC cd)
3492{
3493 unsigned int i;
3494 const CGEN_INSN *insns;
3495
3496 if (cd->macro_insn_table.init_entries)
3497 {
3498 insns = cd->macro_insn_table.init_entries;
3499 for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
3500 if (CGEN_INSN_RX ((insns)))
3501 regfree (CGEN_INSN_RX (insns));
3502 }
3503
3504 if (cd->insn_table.init_entries)
3505 {
3506 insns = cd->insn_table.init_entries;
3507 for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
3508 if (CGEN_INSN_RX (insns))
3509 regfree (CGEN_INSN_RX (insns));
43e65147 3510 }
d70c5fc7
NC
3511
3512 if (cd->macro_insn_table.init_entries)
3513 free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
3514
3515 if (cd->insn_table.init_entries)
3516 free ((CGEN_INSN *) cd->insn_table.init_entries);
3517
3518 if (cd->hw_table.entries)
3519 free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
3520
3521 if (cd->operand_table.entries)
3522 free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
3523
3524 free (cd);
3525}
3526
This page took 0.783083 seconds and 4 git commands to generate.