iq2000-desc.c revision 1.8 1 1.8 christos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 1.1 christos /* CPU data for iq2000.
3 1.1 christos
4 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
5 1.1 christos
6 1.8 christos Copyright (C) 1996-2019 Free Software Foundation, Inc.
7 1.1 christos
8 1.1 christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 1.1 christos
10 1.1 christos This file is free software; you can redistribute it and/or modify
11 1.1 christos it under the terms of the GNU General Public License as published by
12 1.1 christos the Free Software Foundation; either version 3, or (at your option)
13 1.1 christos any later version.
14 1.1 christos
15 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
16 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 1.1 christos License for more details.
19 1.1 christos
20 1.1 christos You should have received a copy of the GNU General Public License along
21 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
22 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23 1.1 christos
24 1.1 christos */
25 1.1 christos
26 1.1 christos #include "sysdep.h"
27 1.1 christos #include <stdio.h>
28 1.1 christos #include <stdarg.h>
29 1.1 christos #include "ansidecl.h"
30 1.1 christos #include "bfd.h"
31 1.1 christos #include "symcat.h"
32 1.1 christos #include "iq2000-desc.h"
33 1.1 christos #include "iq2000-opc.h"
34 1.1 christos #include "opintl.h"
35 1.1 christos #include "libiberty.h"
36 1.1 christos #include "xregex.h"
37 1.1 christos
38 1.1 christos /* Attributes. */
39 1.1 christos
40 1.1 christos static const CGEN_ATTR_ENTRY bool_attr[] =
41 1.1 christos {
42 1.1 christos { "#f", 0 },
43 1.1 christos { "#t", 1 },
44 1.1 christos { 0, 0 }
45 1.1 christos };
46 1.1 christos
47 1.1 christos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
48 1.1 christos {
49 1.1 christos { "base", MACH_BASE },
50 1.1 christos { "iq2000", MACH_IQ2000 },
51 1.1 christos { "iq10", MACH_IQ10 },
52 1.1 christos { "max", MACH_MAX },
53 1.1 christos { 0, 0 }
54 1.1 christos };
55 1.1 christos
56 1.1 christos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
57 1.1 christos {
58 1.1 christos { "iq2000", ISA_IQ2000 },
59 1.1 christos { "max", ISA_MAX },
60 1.1 christos { 0, 0 }
61 1.1 christos };
62 1.1 christos
63 1.1 christos const CGEN_ATTR_TABLE iq2000_cgen_ifield_attr_table[] =
64 1.1 christos {
65 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
66 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
67 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
68 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
69 1.1 christos { "RESERVED", &bool_attr[0], &bool_attr[0] },
70 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
71 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] },
72 1.1 christos { 0, 0, 0 }
73 1.1 christos };
74 1.1 christos
75 1.1 christos const CGEN_ATTR_TABLE iq2000_cgen_hardware_attr_table[] =
76 1.1 christos {
77 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
78 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
79 1.1 christos { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
80 1.1 christos { "PC", &bool_attr[0], &bool_attr[0] },
81 1.1 christos { "PROFILE", &bool_attr[0], &bool_attr[0] },
82 1.1 christos { 0, 0, 0 }
83 1.1 christos };
84 1.1 christos
85 1.1 christos const CGEN_ATTR_TABLE iq2000_cgen_operand_attr_table[] =
86 1.1 christos {
87 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
88 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
89 1.1 christos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
90 1.1 christos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
91 1.1 christos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
92 1.1 christos { "SIGNED", &bool_attr[0], &bool_attr[0] },
93 1.1 christos { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
94 1.1 christos { "RELAX", &bool_attr[0], &bool_attr[0] },
95 1.1 christos { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
96 1.1 christos { 0, 0, 0 }
97 1.1 christos };
98 1.1 christos
99 1.1 christos const CGEN_ATTR_TABLE iq2000_cgen_insn_attr_table[] =
100 1.1 christos {
101 1.1 christos { "MACH", & MACH_attr[0], & MACH_attr[0] },
102 1.1 christos { "ALIAS", &bool_attr[0], &bool_attr[0] },
103 1.1 christos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
104 1.1 christos { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
105 1.1 christos { "COND-CTI", &bool_attr[0], &bool_attr[0] },
106 1.1 christos { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
107 1.1 christos { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
108 1.1 christos { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
109 1.1 christos { "RELAXED", &bool_attr[0], &bool_attr[0] },
110 1.1 christos { "NO-DIS", &bool_attr[0], &bool_attr[0] },
111 1.1 christos { "PBB", &bool_attr[0], &bool_attr[0] },
112 1.1 christos { "YIELD-INSN", &bool_attr[0], &bool_attr[0] },
113 1.1 christos { "LOAD-DELAY", &bool_attr[0], &bool_attr[0] },
114 1.1 christos { "EVEN-REG-NUM", &bool_attr[0], &bool_attr[0] },
115 1.1 christos { "UNSUPPORTED", &bool_attr[0], &bool_attr[0] },
116 1.1 christos { "USES-RD", &bool_attr[0], &bool_attr[0] },
117 1.1 christos { "USES-RS", &bool_attr[0], &bool_attr[0] },
118 1.1 christos { "USES-RT", &bool_attr[0], &bool_attr[0] },
119 1.1 christos { "USES-R31", &bool_attr[0], &bool_attr[0] },
120 1.1 christos { 0, 0, 0 }
121 1.1 christos };
122 1.1 christos
123 1.1 christos /* Instruction set variants. */
124 1.1 christos
125 1.1 christos static const CGEN_ISA iq2000_cgen_isa_table[] = {
126 1.1 christos { "iq2000", 32, 32, 32, 32 },
127 1.1 christos { 0, 0, 0, 0, 0 }
128 1.1 christos };
129 1.1 christos
130 1.1 christos /* Machine variants. */
131 1.1 christos
132 1.1 christos static const CGEN_MACH iq2000_cgen_mach_table[] = {
133 1.1 christos { "iq2000", "iq2000", MACH_IQ2000, 0 },
134 1.1 christos { "iq10", "iq10", MACH_IQ10, 0 },
135 1.1 christos { 0, 0, 0, 0 }
136 1.1 christos };
137 1.1 christos
138 1.1 christos static CGEN_KEYWORD_ENTRY iq2000_cgen_opval_gr_names_entries[] =
139 1.1 christos {
140 1.1 christos { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
141 1.1 christos { "%0", 0, {0, {{{0, 0}}}}, 0, 0 },
142 1.1 christos { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
143 1.1 christos { "%1", 1, {0, {{{0, 0}}}}, 0, 0 },
144 1.1 christos { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
145 1.1 christos { "%2", 2, {0, {{{0, 0}}}}, 0, 0 },
146 1.1 christos { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
147 1.1 christos { "%3", 3, {0, {{{0, 0}}}}, 0, 0 },
148 1.1 christos { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
149 1.1 christos { "%4", 4, {0, {{{0, 0}}}}, 0, 0 },
150 1.1 christos { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
151 1.1 christos { "%5", 5, {0, {{{0, 0}}}}, 0, 0 },
152 1.1 christos { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
153 1.1 christos { "%6", 6, {0, {{{0, 0}}}}, 0, 0 },
154 1.1 christos { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
155 1.1 christos { "%7", 7, {0, {{{0, 0}}}}, 0, 0 },
156 1.1 christos { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
157 1.1 christos { "%8", 8, {0, {{{0, 0}}}}, 0, 0 },
158 1.1 christos { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
159 1.1 christos { "%9", 9, {0, {{{0, 0}}}}, 0, 0 },
160 1.1 christos { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
161 1.1 christos { "%10", 10, {0, {{{0, 0}}}}, 0, 0 },
162 1.1 christos { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
163 1.1 christos { "%11", 11, {0, {{{0, 0}}}}, 0, 0 },
164 1.1 christos { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
165 1.1 christos { "%12", 12, {0, {{{0, 0}}}}, 0, 0 },
166 1.1 christos { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
167 1.1 christos { "%13", 13, {0, {{{0, 0}}}}, 0, 0 },
168 1.1 christos { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
169 1.1 christos { "%14", 14, {0, {{{0, 0}}}}, 0, 0 },
170 1.1 christos { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
171 1.1 christos { "%15", 15, {0, {{{0, 0}}}}, 0, 0 },
172 1.1 christos { "r16", 16, {0, {{{0, 0}}}}, 0, 0 },
173 1.1 christos { "%16", 16, {0, {{{0, 0}}}}, 0, 0 },
174 1.1 christos { "r17", 17, {0, {{{0, 0}}}}, 0, 0 },
175 1.1 christos { "%17", 17, {0, {{{0, 0}}}}, 0, 0 },
176 1.1 christos { "r18", 18, {0, {{{0, 0}}}}, 0, 0 },
177 1.1 christos { "%18", 18, {0, {{{0, 0}}}}, 0, 0 },
178 1.1 christos { "r19", 19, {0, {{{0, 0}}}}, 0, 0 },
179 1.1 christos { "%19", 19, {0, {{{0, 0}}}}, 0, 0 },
180 1.1 christos { "r20", 20, {0, {{{0, 0}}}}, 0, 0 },
181 1.1 christos { "%20", 20, {0, {{{0, 0}}}}, 0, 0 },
182 1.1 christos { "r21", 21, {0, {{{0, 0}}}}, 0, 0 },
183 1.1 christos { "%21", 21, {0, {{{0, 0}}}}, 0, 0 },
184 1.1 christos { "r22", 22, {0, {{{0, 0}}}}, 0, 0 },
185 1.1 christos { "%22", 22, {0, {{{0, 0}}}}, 0, 0 },
186 1.1 christos { "r23", 23, {0, {{{0, 0}}}}, 0, 0 },
187 1.1 christos { "%23", 23, {0, {{{0, 0}}}}, 0, 0 },
188 1.1 christos { "r24", 24, {0, {{{0, 0}}}}, 0, 0 },
189 1.1 christos { "%24", 24, {0, {{{0, 0}}}}, 0, 0 },
190 1.1 christos { "r25", 25, {0, {{{0, 0}}}}, 0, 0 },
191 1.1 christos { "%25", 25, {0, {{{0, 0}}}}, 0, 0 },
192 1.1 christos { "r26", 26, {0, {{{0, 0}}}}, 0, 0 },
193 1.1 christos { "%26", 26, {0, {{{0, 0}}}}, 0, 0 },
194 1.1 christos { "r27", 27, {0, {{{0, 0}}}}, 0, 0 },
195 1.1 christos { "%27", 27, {0, {{{0, 0}}}}, 0, 0 },
196 1.1 christos { "r28", 28, {0, {{{0, 0}}}}, 0, 0 },
197 1.1 christos { "%28", 28, {0, {{{0, 0}}}}, 0, 0 },
198 1.1 christos { "r29", 29, {0, {{{0, 0}}}}, 0, 0 },
199 1.1 christos { "%29", 29, {0, {{{0, 0}}}}, 0, 0 },
200 1.1 christos { "r30", 30, {0, {{{0, 0}}}}, 0, 0 },
201 1.1 christos { "%30", 30, {0, {{{0, 0}}}}, 0, 0 },
202 1.1 christos { "r31", 31, {0, {{{0, 0}}}}, 0, 0 },
203 1.1 christos { "%31", 31, {0, {{{0, 0}}}}, 0, 0 }
204 1.1 christos };
205 1.1 christos
206 1.1 christos CGEN_KEYWORD iq2000_cgen_opval_gr_names =
207 1.1 christos {
208 1.1 christos & iq2000_cgen_opval_gr_names_entries[0],
209 1.1 christos 64,
210 1.1 christos 0, 0, 0, 0, ""
211 1.1 christos };
212 1.1 christos
213 1.1 christos
214 1.1 christos /* The hardware table. */
215 1.1 christos
216 1.1 christos #define A(a) (1 << CGEN_HW_##a)
217 1.1 christos
218 1.1 christos const CGEN_HW_ENTRY iq2000_cgen_hw_table[] =
219 1.1 christos {
220 1.1 christos { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
221 1.1 christos { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
222 1.1 christos { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
223 1.1 christos { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
224 1.1 christos { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
225 1.1 christos { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
226 1.1 christos { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
227 1.1 christos { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
228 1.1 christos };
229 1.1 christos
230 1.1 christos #undef A
231 1.1 christos
232 1.1 christos
233 1.1 christos /* The instruction field table. */
234 1.1 christos
235 1.1 christos #define A(a) (1 << CGEN_IFLD_##a)
236 1.1 christos
237 1.1 christos const CGEN_IFLD iq2000_cgen_ifld_table[] =
238 1.1 christos {
239 1.1 christos { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
240 1.1 christos { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
241 1.1 christos { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } },
242 1.1 christos { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
243 1.1 christos { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
244 1.1 christos { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
245 1.1 christos { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
246 1.1 christos { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
247 1.1 christos { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
248 1.1 christos { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
249 1.1 christos { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } },
250 1.1 christos { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
251 1.1 christos { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
252 1.1 christos { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
253 1.1 christos { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
254 1.1 christos { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
255 1.1 christos { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
256 1.1 christos { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
257 1.1 christos { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { { { (1<<MACH_BASE), 0 } } } } },
258 1.1 christos { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
259 1.1 christos { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { { { (1<<MACH_BASE), 0 } } } } },
260 1.1 christos { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
261 1.1 christos { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
262 1.1 christos { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
263 1.1 christos { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { { { (1<<MACH_BASE), 0 } } } } },
264 1.1 christos { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { { { (1<<MACH_BASE), 0 } } } } },
265 1.1 christos { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_BASE), 0 } } } } },
266 1.1 christos { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { { { (1<<MACH_BASE), 0 } } } } },
267 1.1 christos { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
268 1.1 christos { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
269 1.1 christos { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
270 1.1 christos { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
271 1.1 christos { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
272 1.1 christos { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
273 1.1 christos { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
274 1.1 christos { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
275 1.1 christos { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
276 1.1 christos { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
277 1.1 christos };
278 1.1 christos
279 1.1 christos #undef A
280 1.1 christos
281 1.1 christos
282 1.1 christos
283 1.1 christos /* multi ifield declarations */
284 1.1 christos
285 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [];
286 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [];
287 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [];
288 1.1 christos
289 1.1 christos
290 1.1 christos /* multi ifield definitions */
291 1.1 christos
292 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [] =
293 1.1 christos {
294 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
295 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
296 1.1 christos { 0, { (const PTR) 0 } }
297 1.1 christos };
298 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [] =
299 1.1 christos {
300 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
301 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
302 1.1 christos { 0, { (const PTR) 0 } }
303 1.1 christos };
304 1.1 christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [] =
305 1.1 christos {
306 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
307 1.1 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
308 1.1 christos { 0, { (const PTR) 0 } }
309 1.1 christos };
310 1.1 christos
311 1.1 christos /* The operand table. */
312 1.1 christos
313 1.1 christos #define A(a) (1 << CGEN_OPERAND_##a)
314 1.1 christos #define OPERAND(op) IQ2000_OPERAND_##op
315 1.1 christos
316 1.1 christos const CGEN_OPERAND iq2000_cgen_operand_table[] =
317 1.1 christos {
318 1.1 christos /* pc: program counter */
319 1.1 christos { "pc", IQ2000_OPERAND_PC, HW_H_PC, 0, 0,
320 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_NIL] } },
321 1.1 christos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
322 1.1 christos /* rs: register Rs */
323 1.1 christos { "rs", IQ2000_OPERAND_RS, HW_H_GR, 25, 5,
324 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
325 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
326 1.1 christos /* rt: register Rt */
327 1.1 christos { "rt", IQ2000_OPERAND_RT, HW_H_GR, 20, 5,
328 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
329 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
330 1.1 christos /* rd: register Rd */
331 1.1 christos { "rd", IQ2000_OPERAND_RD, HW_H_GR, 15, 5,
332 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
333 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
334 1.1 christos /* rd-rs: register Rd from Rs */
335 1.1 christos { "rd-rs", IQ2000_OPERAND_RD_RS, HW_H_GR, 15, 10,
336 1.6 christos { 2, { (const PTR) &IQ2000_F_RD_RS_MULTI_IFIELD[0] } },
337 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
338 1.1 christos /* rd-rt: register Rd from Rt */
339 1.1 christos { "rd-rt", IQ2000_OPERAND_RD_RT, HW_H_GR, 15, 10,
340 1.6 christos { 2, { (const PTR) &IQ2000_F_RD_RT_MULTI_IFIELD[0] } },
341 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
342 1.1 christos /* rt-rs: register Rt from Rs */
343 1.1 christos { "rt-rs", IQ2000_OPERAND_RT_RS, HW_H_GR, 20, 10,
344 1.6 christos { 2, { (const PTR) &IQ2000_F_RT_RS_MULTI_IFIELD[0] } },
345 1.1 christos { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } },
346 1.1 christos /* shamt: shift amount */
347 1.1 christos { "shamt", IQ2000_OPERAND_SHAMT, HW_H_UINT, 10, 5,
348 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_SHAMT] } },
349 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
350 1.1 christos /* imm: immediate */
351 1.1 christos { "imm", IQ2000_OPERAND_IMM, HW_H_UINT, 15, 16,
352 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
353 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
354 1.1 christos /* offset: pc-relative offset */
355 1.1 christos { "offset", IQ2000_OPERAND_OFFSET, HW_H_IADDR, 15, 16,
356 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_OFFSET] } },
357 1.1 christos { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
358 1.1 christos /* baseoff: base register offset */
359 1.1 christos { "baseoff", IQ2000_OPERAND_BASEOFF, HW_H_IADDR, 15, 16,
360 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
361 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
362 1.1 christos /* jmptarg: jump target */
363 1.1 christos { "jmptarg", IQ2000_OPERAND_JMPTARG, HW_H_IADDR, 15, 16,
364 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARG] } },
365 1.1 christos { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
366 1.1 christos /* mask: mask */
367 1.1 christos { "mask", IQ2000_OPERAND_MASK, HW_H_UINT, 9, 4,
368 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASK] } },
369 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
370 1.1 christos /* maskq10: iq10 mask */
371 1.1 christos { "maskq10", IQ2000_OPERAND_MASKQ10, HW_H_UINT, 10, 5,
372 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKQ10] } },
373 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
374 1.1 christos /* maskl: mask left */
375 1.1 christos { "maskl", IQ2000_OPERAND_MASKL, HW_H_UINT, 4, 5,
376 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKL] } },
377 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
378 1.1 christos /* count: count */
379 1.1 christos { "count", IQ2000_OPERAND_COUNT, HW_H_UINT, 15, 7,
380 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_COUNT] } },
381 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
382 1.1 christos /* _index: index */
383 1.1 christos { "_index", IQ2000_OPERAND__INDEX, HW_H_UINT, 8, 9,
384 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_INDEX] } },
385 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
386 1.1 christos /* execode: execcode */
387 1.1 christos { "execode", IQ2000_OPERAND_EXECODE, HW_H_UINT, 25, 20,
388 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_EXCODE] } },
389 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
390 1.1 christos /* bytecount: byte count */
391 1.1 christos { "bytecount", IQ2000_OPERAND_BYTECOUNT, HW_H_UINT, 7, 8,
392 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_BYTECOUNT] } },
393 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
394 1.1 christos /* cam-y: cam global opn y */
395 1.1 christos { "cam-y", IQ2000_OPERAND_CAM_Y, HW_H_UINT, 2, 3,
396 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Y] } },
397 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
398 1.1 christos /* cam-z: cam global mask z */
399 1.1 christos { "cam-z", IQ2000_OPERAND_CAM_Z, HW_H_UINT, 5, 3,
400 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Z] } },
401 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
402 1.1 christos /* cm-3func: CM 3 bit fn field */
403 1.1 christos { "cm-3func", IQ2000_OPERAND_CM_3FUNC, HW_H_UINT, 5, 3,
404 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3FUNC] } },
405 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
406 1.1 christos /* cm-4func: CM 4 bit fn field */
407 1.1 christos { "cm-4func", IQ2000_OPERAND_CM_4FUNC, HW_H_UINT, 5, 4,
408 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4FUNC] } },
409 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
410 1.1 christos /* cm-3z: CM 3 bit Z field */
411 1.1 christos { "cm-3z", IQ2000_OPERAND_CM_3Z, HW_H_UINT, 1, 2,
412 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3Z] } },
413 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
414 1.1 christos /* cm-4z: CM 4 bit Z field */
415 1.1 christos { "cm-4z", IQ2000_OPERAND_CM_4Z, HW_H_UINT, 2, 3,
416 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4Z] } },
417 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
418 1.1 christos /* base: base register */
419 1.1 christos { "base", IQ2000_OPERAND_BASE, HW_H_GR, 25, 5,
420 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
421 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
422 1.1 christos /* maskr: mask right */
423 1.1 christos { "maskr", IQ2000_OPERAND_MASKR, HW_H_UINT, 25, 5,
424 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
425 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
426 1.1 christos /* bitnum: bit number */
427 1.1 christos { "bitnum", IQ2000_OPERAND_BITNUM, HW_H_UINT, 20, 5,
428 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
429 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
430 1.1 christos /* hi16: high 16 bit immediate */
431 1.1 christos { "hi16", IQ2000_OPERAND_HI16, HW_H_UINT, 15, 16,
432 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
433 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
434 1.1 christos /* lo16: 16 bit signed immediate, for low */
435 1.1 christos { "lo16", IQ2000_OPERAND_LO16, HW_H_UINT, 15, 16,
436 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
437 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
438 1.1 christos /* mlo16: negated 16 bit signed immediate */
439 1.1 christos { "mlo16", IQ2000_OPERAND_MLO16, HW_H_UINT, 15, 16,
440 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
441 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } },
442 1.1 christos /* jmptargq10: iq10 21-bit jump offset */
443 1.1 christos { "jmptargq10", IQ2000_OPERAND_JMPTARGQ10, HW_H_IADDR, 20, 21,
444 1.6 christos { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARGQ10] } },
445 1.1 christos { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
446 1.1 christos /* sentinel */
447 1.1 christos { 0, 0, 0, 0, 0,
448 1.1 christos { 0, { (const PTR) 0 } },
449 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } } }
450 1.1 christos };
451 1.1 christos
452 1.1 christos #undef A
453 1.1 christos
454 1.1 christos
455 1.1 christos /* The instruction table. */
456 1.1 christos
457 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
458 1.1 christos #define A(a) (1 << CGEN_INSN_##a)
459 1.1 christos
460 1.1 christos static const CGEN_IBASE iq2000_cgen_insn_table[MAX_INSNS] =
461 1.1 christos {
462 1.1 christos /* Special null first entry.
463 1.1 christos A `num' value of zero is thus invalid.
464 1.1 christos Also, the special `invalid' insn resides here. */
465 1.1 christos { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
466 1.1 christos /* add ${rd-rs},$rt */
467 1.1 christos {
468 1.1 christos -1, "add2", "add", 32,
469 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
470 1.1 christos },
471 1.1 christos /* add $rd,$rs,$rt */
472 1.1 christos {
473 1.1 christos IQ2000_INSN_ADD, "add", "add", 32,
474 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
475 1.1 christos },
476 1.1 christos /* addi ${rt-rs},$lo16 */
477 1.1 christos {
478 1.1 christos -1, "addi2", "addi", 32,
479 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
480 1.1 christos },
481 1.1 christos /* addi $rt,$rs,$lo16 */
482 1.1 christos {
483 1.1 christos IQ2000_INSN_ADDI, "addi", "addi", 32,
484 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
485 1.1 christos },
486 1.1 christos /* addiu ${rt-rs},$lo16 */
487 1.1 christos {
488 1.1 christos -1, "addiu2", "addiu", 32,
489 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
490 1.1 christos },
491 1.1 christos /* addiu $rt,$rs,$lo16 */
492 1.1 christos {
493 1.1 christos IQ2000_INSN_ADDIU, "addiu", "addiu", 32,
494 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
495 1.1 christos },
496 1.1 christos /* addu ${rd-rs},$rt */
497 1.1 christos {
498 1.1 christos -1, "addu2", "addu", 32,
499 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
500 1.1 christos },
501 1.1 christos /* addu $rd,$rs,$rt */
502 1.1 christos {
503 1.1 christos IQ2000_INSN_ADDU, "addu", "addu", 32,
504 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
505 1.1 christos },
506 1.1 christos /* ado16 ${rd-rs},$rt */
507 1.1 christos {
508 1.1 christos -1, "ado162", "ado16", 32,
509 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
510 1.1 christos },
511 1.1 christos /* ado16 $rd,$rs,$rt */
512 1.1 christos {
513 1.1 christos IQ2000_INSN_ADO16, "ado16", "ado16", 32,
514 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
515 1.1 christos },
516 1.1 christos /* and ${rd-rs},$rt */
517 1.1 christos {
518 1.1 christos -1, "and2", "and", 32,
519 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
520 1.1 christos },
521 1.1 christos /* and $rd,$rs,$rt */
522 1.1 christos {
523 1.1 christos IQ2000_INSN_AND, "and", "and", 32,
524 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
525 1.1 christos },
526 1.1 christos /* andi ${rt-rs},$lo16 */
527 1.1 christos {
528 1.1 christos -1, "andi2", "andi", 32,
529 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
530 1.1 christos },
531 1.1 christos /* andi $rt,$rs,$lo16 */
532 1.1 christos {
533 1.1 christos IQ2000_INSN_ANDI, "andi", "andi", 32,
534 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
535 1.1 christos },
536 1.1 christos /* andoi ${rt-rs},$lo16 */
537 1.1 christos {
538 1.1 christos -1, "andoi2", "andoi", 32,
539 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
540 1.1 christos },
541 1.1 christos /* andoi $rt,$rs,$lo16 */
542 1.1 christos {
543 1.1 christos IQ2000_INSN_ANDOI, "andoi", "andoi", 32,
544 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
545 1.1 christos },
546 1.1 christos /* nor ${rd-rs},$rt */
547 1.1 christos {
548 1.1 christos -1, "nor2", "nor", 32,
549 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
550 1.1 christos },
551 1.1 christos /* nor $rd,$rs,$rt */
552 1.1 christos {
553 1.1 christos IQ2000_INSN_NOR, "nor", "nor", 32,
554 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
555 1.1 christos },
556 1.1 christos /* or ${rd-rs},$rt */
557 1.1 christos {
558 1.1 christos -1, "or2", "or", 32,
559 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
560 1.1 christos },
561 1.1 christos /* or $rd,$rs,$rt */
562 1.1 christos {
563 1.1 christos IQ2000_INSN_OR, "or", "or", 32,
564 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
565 1.1 christos },
566 1.1 christos /* ori ${rt-rs},$lo16 */
567 1.1 christos {
568 1.1 christos -1, "ori2", "ori", 32,
569 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
570 1.1 christos },
571 1.1 christos /* ori $rt,$rs,$lo16 */
572 1.1 christos {
573 1.1 christos IQ2000_INSN_ORI, "ori", "ori", 32,
574 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
575 1.1 christos },
576 1.1 christos /* ram $rd,$rt,$shamt,$maskl,$maskr */
577 1.1 christos {
578 1.1 christos IQ2000_INSN_RAM, "ram", "ram", 32,
579 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
580 1.1 christos },
581 1.1 christos /* sll $rd,$rt,$shamt */
582 1.1 christos {
583 1.1 christos IQ2000_INSN_SLL, "sll", "sll", 32,
584 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
585 1.1 christos },
586 1.1 christos /* sllv ${rd-rt},$rs */
587 1.1 christos {
588 1.1 christos -1, "sllv2", "sllv", 32,
589 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
590 1.1 christos },
591 1.1 christos /* sllv $rd,$rt,$rs */
592 1.1 christos {
593 1.1 christos IQ2000_INSN_SLLV, "sllv", "sllv", 32,
594 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
595 1.1 christos },
596 1.1 christos /* slmv ${rd-rt},$rs,$shamt */
597 1.1 christos {
598 1.1 christos -1, "slmv2", "slmv", 32,
599 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
600 1.1 christos },
601 1.1 christos /* slmv $rd,$rt,$rs,$shamt */
602 1.1 christos {
603 1.1 christos IQ2000_INSN_SLMV, "slmv", "slmv", 32,
604 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
605 1.1 christos },
606 1.1 christos /* slt ${rd-rs},$rt */
607 1.1 christos {
608 1.1 christos -1, "slt2", "slt", 32,
609 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
610 1.1 christos },
611 1.1 christos /* slt $rd,$rs,$rt */
612 1.1 christos {
613 1.1 christos IQ2000_INSN_SLT, "slt", "slt", 32,
614 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
615 1.1 christos },
616 1.1 christos /* slti ${rt-rs},$imm */
617 1.1 christos {
618 1.1 christos -1, "slti2", "slti", 32,
619 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
620 1.1 christos },
621 1.1 christos /* slti $rt,$rs,$imm */
622 1.1 christos {
623 1.1 christos IQ2000_INSN_SLTI, "slti", "slti", 32,
624 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
625 1.1 christos },
626 1.1 christos /* sltiu ${rt-rs},$imm */
627 1.1 christos {
628 1.1 christos -1, "sltiu2", "sltiu", 32,
629 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
630 1.1 christos },
631 1.1 christos /* sltiu $rt,$rs,$imm */
632 1.1 christos {
633 1.1 christos IQ2000_INSN_SLTIU, "sltiu", "sltiu", 32,
634 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
635 1.1 christos },
636 1.1 christos /* sltu ${rd-rs},$rt */
637 1.1 christos {
638 1.1 christos -1, "sltu2", "sltu", 32,
639 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
640 1.1 christos },
641 1.1 christos /* sltu $rd,$rs,$rt */
642 1.1 christos {
643 1.1 christos IQ2000_INSN_SLTU, "sltu", "sltu", 32,
644 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
645 1.1 christos },
646 1.1 christos /* sra ${rd-rt},$shamt */
647 1.1 christos {
648 1.1 christos -1, "sra2", "sra", 32,
649 1.1 christos { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
650 1.1 christos },
651 1.1 christos /* sra $rd,$rt,$shamt */
652 1.1 christos {
653 1.1 christos IQ2000_INSN_SRA, "sra", "sra", 32,
654 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
655 1.1 christos },
656 1.1 christos /* srav ${rd-rt},$rs */
657 1.1 christos {
658 1.1 christos -1, "srav2", "srav", 32,
659 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
660 1.1 christos },
661 1.1 christos /* srav $rd,$rt,$rs */
662 1.1 christos {
663 1.1 christos IQ2000_INSN_SRAV, "srav", "srav", 32,
664 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
665 1.1 christos },
666 1.1 christos /* srl $rd,$rt,$shamt */
667 1.1 christos {
668 1.1 christos IQ2000_INSN_SRL, "srl", "srl", 32,
669 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
670 1.1 christos },
671 1.1 christos /* srlv ${rd-rt},$rs */
672 1.1 christos {
673 1.1 christos -1, "srlv2", "srlv", 32,
674 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
675 1.1 christos },
676 1.1 christos /* srlv $rd,$rt,$rs */
677 1.1 christos {
678 1.1 christos IQ2000_INSN_SRLV, "srlv", "srlv", 32,
679 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
680 1.1 christos },
681 1.1 christos /* srmv ${rd-rt},$rs,$shamt */
682 1.1 christos {
683 1.1 christos -1, "srmv2", "srmv", 32,
684 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
685 1.1 christos },
686 1.1 christos /* srmv $rd,$rt,$rs,$shamt */
687 1.1 christos {
688 1.1 christos IQ2000_INSN_SRMV, "srmv", "srmv", 32,
689 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
690 1.1 christos },
691 1.1 christos /* sub ${rd-rs},$rt */
692 1.1 christos {
693 1.1 christos -1, "sub2", "sub", 32,
694 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
695 1.1 christos },
696 1.1 christos /* sub $rd,$rs,$rt */
697 1.1 christos {
698 1.1 christos IQ2000_INSN_SUB, "sub", "sub", 32,
699 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
700 1.1 christos },
701 1.1 christos /* subu ${rd-rs},$rt */
702 1.1 christos {
703 1.1 christos -1, "subu2", "subu", 32,
704 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
705 1.1 christos },
706 1.1 christos /* subu $rd,$rs,$rt */
707 1.1 christos {
708 1.1 christos IQ2000_INSN_SUBU, "subu", "subu", 32,
709 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
710 1.1 christos },
711 1.1 christos /* xor ${rd-rs},$rt */
712 1.1 christos {
713 1.1 christos -1, "xor2", "xor", 32,
714 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
715 1.1 christos },
716 1.1 christos /* xor $rd,$rs,$rt */
717 1.1 christos {
718 1.1 christos IQ2000_INSN_XOR, "xor", "xor", 32,
719 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
720 1.1 christos },
721 1.1 christos /* xori ${rt-rs},$lo16 */
722 1.1 christos {
723 1.1 christos -1, "xori2", "xori", 32,
724 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
725 1.1 christos },
726 1.1 christos /* xori $rt,$rs,$lo16 */
727 1.1 christos {
728 1.1 christos IQ2000_INSN_XORI, "xori", "xori", 32,
729 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
730 1.1 christos },
731 1.1 christos /* bbi $rs($bitnum),$offset */
732 1.1 christos {
733 1.1 christos IQ2000_INSN_BBI, "bbi", "bbi", 32,
734 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
735 1.1 christos },
736 1.1 christos /* bbin $rs($bitnum),$offset */
737 1.1 christos {
738 1.1 christos IQ2000_INSN_BBIN, "bbin", "bbin", 32,
739 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
740 1.1 christos },
741 1.1 christos /* bbv $rs,$rt,$offset */
742 1.1 christos {
743 1.1 christos IQ2000_INSN_BBV, "bbv", "bbv", 32,
744 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
745 1.1 christos },
746 1.1 christos /* bbvn $rs,$rt,$offset */
747 1.1 christos {
748 1.1 christos IQ2000_INSN_BBVN, "bbvn", "bbvn", 32,
749 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
750 1.1 christos },
751 1.1 christos /* beq $rs,$rt,$offset */
752 1.1 christos {
753 1.1 christos IQ2000_INSN_BEQ, "beq", "beq", 32,
754 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
755 1.1 christos },
756 1.1 christos /* beql $rs,$rt,$offset */
757 1.1 christos {
758 1.1 christos IQ2000_INSN_BEQL, "beql", "beql", 32,
759 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
760 1.1 christos },
761 1.1 christos /* bgez $rs,$offset */
762 1.1 christos {
763 1.1 christos IQ2000_INSN_BGEZ, "bgez", "bgez", 32,
764 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
765 1.1 christos },
766 1.1 christos /* bgezal $rs,$offset */
767 1.1 christos {
768 1.1 christos IQ2000_INSN_BGEZAL, "bgezal", "bgezal", 32,
769 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
770 1.1 christos },
771 1.1 christos /* bgezall $rs,$offset */
772 1.1 christos {
773 1.1 christos IQ2000_INSN_BGEZALL, "bgezall", "bgezall", 32,
774 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
775 1.1 christos },
776 1.1 christos /* bgezl $rs,$offset */
777 1.1 christos {
778 1.1 christos IQ2000_INSN_BGEZL, "bgezl", "bgezl", 32,
779 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
780 1.1 christos },
781 1.1 christos /* bltz $rs,$offset */
782 1.1 christos {
783 1.1 christos IQ2000_INSN_BLTZ, "bltz", "bltz", 32,
784 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
785 1.1 christos },
786 1.1 christos /* bltzl $rs,$offset */
787 1.1 christos {
788 1.1 christos IQ2000_INSN_BLTZL, "bltzl", "bltzl", 32,
789 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
790 1.1 christos },
791 1.1 christos /* bltzal $rs,$offset */
792 1.1 christos {
793 1.1 christos IQ2000_INSN_BLTZAL, "bltzal", "bltzal", 32,
794 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
795 1.1 christos },
796 1.1 christos /* bltzall $rs,$offset */
797 1.1 christos {
798 1.1 christos IQ2000_INSN_BLTZALL, "bltzall", "bltzall", 32,
799 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
800 1.1 christos },
801 1.1 christos /* bmb0 $rs,$rt,$offset */
802 1.1 christos {
803 1.1 christos IQ2000_INSN_BMB0, "bmb0", "bmb0", 32,
804 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
805 1.1 christos },
806 1.1 christos /* bmb1 $rs,$rt,$offset */
807 1.1 christos {
808 1.1 christos IQ2000_INSN_BMB1, "bmb1", "bmb1", 32,
809 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
810 1.1 christos },
811 1.1 christos /* bmb2 $rs,$rt,$offset */
812 1.1 christos {
813 1.1 christos IQ2000_INSN_BMB2, "bmb2", "bmb2", 32,
814 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
815 1.1 christos },
816 1.1 christos /* bmb3 $rs,$rt,$offset */
817 1.1 christos {
818 1.1 christos IQ2000_INSN_BMB3, "bmb3", "bmb3", 32,
819 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
820 1.1 christos },
821 1.1 christos /* bne $rs,$rt,$offset */
822 1.1 christos {
823 1.1 christos IQ2000_INSN_BNE, "bne", "bne", 32,
824 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
825 1.1 christos },
826 1.1 christos /* bnel $rs,$rt,$offset */
827 1.1 christos {
828 1.1 christos IQ2000_INSN_BNEL, "bnel", "bnel", 32,
829 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
830 1.1 christos },
831 1.1 christos /* jalr $rd,$rs */
832 1.1 christos {
833 1.1 christos IQ2000_INSN_JALR, "jalr", "jalr", 32,
834 1.1 christos { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
835 1.1 christos },
836 1.1 christos /* jr $rs */
837 1.1 christos {
838 1.1 christos IQ2000_INSN_JR, "jr", "jr", 32,
839 1.1 christos { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
840 1.1 christos },
841 1.1 christos /* lb $rt,$lo16($base) */
842 1.1 christos {
843 1.1 christos IQ2000_INSN_LB, "lb", "lb", 32,
844 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
845 1.1 christos },
846 1.1 christos /* lbu $rt,$lo16($base) */
847 1.1 christos {
848 1.1 christos IQ2000_INSN_LBU, "lbu", "lbu", 32,
849 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
850 1.1 christos },
851 1.1 christos /* lh $rt,$lo16($base) */
852 1.1 christos {
853 1.1 christos IQ2000_INSN_LH, "lh", "lh", 32,
854 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
855 1.1 christos },
856 1.1 christos /* lhu $rt,$lo16($base) */
857 1.1 christos {
858 1.1 christos IQ2000_INSN_LHU, "lhu", "lhu", 32,
859 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
860 1.1 christos },
861 1.1 christos /* lui $rt,$hi16 */
862 1.1 christos {
863 1.1 christos IQ2000_INSN_LUI, "lui", "lui", 32,
864 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_BASE), 0 } } } }
865 1.1 christos },
866 1.1 christos /* lw $rt,$lo16($base) */
867 1.1 christos {
868 1.1 christos IQ2000_INSN_LW, "lw", "lw", 32,
869 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
870 1.1 christos },
871 1.1 christos /* sb $rt,$lo16($base) */
872 1.1 christos {
873 1.1 christos IQ2000_INSN_SB, "sb", "sb", 32,
874 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
875 1.1 christos },
876 1.1 christos /* sh $rt,$lo16($base) */
877 1.1 christos {
878 1.1 christos IQ2000_INSN_SH, "sh", "sh", 32,
879 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
880 1.1 christos },
881 1.1 christos /* sw $rt,$lo16($base) */
882 1.1 christos {
883 1.1 christos IQ2000_INSN_SW, "sw", "sw", 32,
884 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
885 1.1 christos },
886 1.1 christos /* break */
887 1.1 christos {
888 1.1 christos IQ2000_INSN_BREAK, "break", "break", 32,
889 1.1 christos { 0, { { { (1<<MACH_BASE), 0 } } } }
890 1.1 christos },
891 1.1 christos /* syscall */
892 1.1 christos {
893 1.1 christos IQ2000_INSN_SYSCALL, "syscall", "syscall", 32,
894 1.1 christos { 0|A(YIELD_INSN), { { { (1<<MACH_BASE), 0 } } } }
895 1.1 christos },
896 1.1 christos /* andoui $rt,$rs,$hi16 */
897 1.1 christos {
898 1.1 christos IQ2000_INSN_ANDOUI, "andoui", "andoui", 32,
899 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
900 1.1 christos },
901 1.1 christos /* andoui ${rt-rs},$hi16 */
902 1.1 christos {
903 1.1 christos -1, "andoui2", "andoui", 32,
904 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
905 1.1 christos },
906 1.1 christos /* orui ${rt-rs},$hi16 */
907 1.1 christos {
908 1.1 christos -1, "orui2", "orui", 32,
909 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
910 1.1 christos },
911 1.1 christos /* orui $rt,$rs,$hi16 */
912 1.1 christos {
913 1.1 christos IQ2000_INSN_ORUI, "orui", "orui", 32,
914 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
915 1.1 christos },
916 1.1 christos /* bgtz $rs,$offset */
917 1.1 christos {
918 1.1 christos IQ2000_INSN_BGTZ, "bgtz", "bgtz", 32,
919 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
920 1.1 christos },
921 1.1 christos /* bgtzl $rs,$offset */
922 1.1 christos {
923 1.1 christos IQ2000_INSN_BGTZL, "bgtzl", "bgtzl", 32,
924 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
925 1.1 christos },
926 1.1 christos /* blez $rs,$offset */
927 1.1 christos {
928 1.1 christos IQ2000_INSN_BLEZ, "blez", "blez", 32,
929 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
930 1.1 christos },
931 1.1 christos /* blezl $rs,$offset */
932 1.1 christos {
933 1.1 christos IQ2000_INSN_BLEZL, "blezl", "blezl", 32,
934 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
935 1.1 christos },
936 1.1 christos /* mrgb $rd,$rs,$rt,$mask */
937 1.1 christos {
938 1.1 christos IQ2000_INSN_MRGB, "mrgb", "mrgb", 32,
939 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
940 1.1 christos },
941 1.1 christos /* mrgb ${rd-rs},$rt,$mask */
942 1.1 christos {
943 1.1 christos -1, "mrgb2", "mrgb", 32,
944 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
945 1.1 christos },
946 1.1 christos /* bctxt $rs,$offset */
947 1.1 christos {
948 1.1 christos IQ2000_INSN_BCTXT, "bctxt", "bctxt", 32,
949 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
950 1.1 christos },
951 1.1 christos /* bc0f $offset */
952 1.1 christos {
953 1.1 christos IQ2000_INSN_BC0F, "bc0f", "bc0f", 32,
954 1.1 christos { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
955 1.1 christos },
956 1.1 christos /* bc0fl $offset */
957 1.1 christos {
958 1.1 christos IQ2000_INSN_BC0FL, "bc0fl", "bc0fl", 32,
959 1.1 christos { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
960 1.1 christos },
961 1.1 christos /* bc3f $offset */
962 1.1 christos {
963 1.1 christos IQ2000_INSN_BC3F, "bc3f", "bc3f", 32,
964 1.1 christos { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
965 1.1 christos },
966 1.1 christos /* bc3fl $offset */
967 1.1 christos {
968 1.1 christos IQ2000_INSN_BC3FL, "bc3fl", "bc3fl", 32,
969 1.1 christos { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
970 1.1 christos },
971 1.1 christos /* bc0t $offset */
972 1.1 christos {
973 1.1 christos IQ2000_INSN_BC0T, "bc0t", "bc0t", 32,
974 1.1 christos { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
975 1.1 christos },
976 1.1 christos /* bc0tl $offset */
977 1.1 christos {
978 1.1 christos IQ2000_INSN_BC0TL, "bc0tl", "bc0tl", 32,
979 1.1 christos { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
980 1.1 christos },
981 1.1 christos /* bc3t $offset */
982 1.1 christos {
983 1.1 christos IQ2000_INSN_BC3T, "bc3t", "bc3t", 32,
984 1.1 christos { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
985 1.1 christos },
986 1.1 christos /* bc3tl $offset */
987 1.1 christos {
988 1.1 christos IQ2000_INSN_BC3TL, "bc3tl", "bc3tl", 32,
989 1.1 christos { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
990 1.1 christos },
991 1.1 christos /* cfc0 $rt,$rd */
992 1.1 christos {
993 1.1 christos IQ2000_INSN_CFC0, "cfc0", "cfc0", 32,
994 1.1 christos { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
995 1.1 christos },
996 1.1 christos /* cfc1 $rt,$rd */
997 1.1 christos {
998 1.1 christos IQ2000_INSN_CFC1, "cfc1", "cfc1", 32,
999 1.1 christos { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1000 1.1 christos },
1001 1.1 christos /* cfc2 $rt,$rd */
1002 1.1 christos {
1003 1.1 christos IQ2000_INSN_CFC2, "cfc2", "cfc2", 32,
1004 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1005 1.1 christos },
1006 1.1 christos /* cfc3 $rt,$rd */
1007 1.1 christos {
1008 1.1 christos IQ2000_INSN_CFC3, "cfc3", "cfc3", 32,
1009 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1010 1.1 christos },
1011 1.1 christos /* chkhdr $rd,$rt */
1012 1.1 christos {
1013 1.1 christos IQ2000_INSN_CHKHDR, "chkhdr", "chkhdr", 32,
1014 1.1 christos { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1015 1.1 christos },
1016 1.1 christos /* ctc0 $rt,$rd */
1017 1.1 christos {
1018 1.1 christos IQ2000_INSN_CTC0, "ctc0", "ctc0", 32,
1019 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1020 1.1 christos },
1021 1.1 christos /* ctc1 $rt,$rd */
1022 1.1 christos {
1023 1.1 christos IQ2000_INSN_CTC1, "ctc1", "ctc1", 32,
1024 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1025 1.1 christos },
1026 1.1 christos /* ctc2 $rt,$rd */
1027 1.1 christos {
1028 1.1 christos IQ2000_INSN_CTC2, "ctc2", "ctc2", 32,
1029 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1030 1.1 christos },
1031 1.1 christos /* ctc3 $rt,$rd */
1032 1.1 christos {
1033 1.1 christos IQ2000_INSN_CTC3, "ctc3", "ctc3", 32,
1034 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1035 1.1 christos },
1036 1.1 christos /* jcr $rs */
1037 1.1 christos {
1038 1.1 christos IQ2000_INSN_JCR, "jcr", "jcr", 32,
1039 1.1 christos { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1040 1.1 christos },
1041 1.1 christos /* luc32 $rt,$rd */
1042 1.1 christos {
1043 1.1 christos IQ2000_INSN_LUC32, "luc32", "luc32", 32,
1044 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1045 1.1 christos },
1046 1.1 christos /* luc32l $rt,$rd */
1047 1.1 christos {
1048 1.1 christos IQ2000_INSN_LUC32L, "luc32l", "luc32l", 32,
1049 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1050 1.1 christos },
1051 1.1 christos /* luc64 $rt,$rd */
1052 1.1 christos {
1053 1.1 christos IQ2000_INSN_LUC64, "luc64", "luc64", 32,
1054 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1055 1.1 christos },
1056 1.1 christos /* luc64l $rt,$rd */
1057 1.1 christos {
1058 1.1 christos IQ2000_INSN_LUC64L, "luc64l", "luc64l", 32,
1059 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1060 1.1 christos },
1061 1.1 christos /* luk $rt,$rd */
1062 1.1 christos {
1063 1.1 christos IQ2000_INSN_LUK, "luk", "luk", 32,
1064 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1065 1.1 christos },
1066 1.1 christos /* lulck $rt */
1067 1.1 christos {
1068 1.1 christos IQ2000_INSN_LULCK, "lulck", "lulck", 32,
1069 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1070 1.1 christos },
1071 1.1 christos /* lum32 $rt,$rd */
1072 1.1 christos {
1073 1.1 christos IQ2000_INSN_LUM32, "lum32", "lum32", 32,
1074 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1075 1.1 christos },
1076 1.1 christos /* lum32l $rt,$rd */
1077 1.1 christos {
1078 1.1 christos IQ2000_INSN_LUM32L, "lum32l", "lum32l", 32,
1079 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1080 1.1 christos },
1081 1.1 christos /* lum64 $rt,$rd */
1082 1.1 christos {
1083 1.1 christos IQ2000_INSN_LUM64, "lum64", "lum64", 32,
1084 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1085 1.1 christos },
1086 1.1 christos /* lum64l $rt,$rd */
1087 1.1 christos {
1088 1.1 christos IQ2000_INSN_LUM64L, "lum64l", "lum64l", 32,
1089 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1090 1.1 christos },
1091 1.1 christos /* lur $rt,$rd */
1092 1.1 christos {
1093 1.1 christos IQ2000_INSN_LUR, "lur", "lur", 32,
1094 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1095 1.1 christos },
1096 1.1 christos /* lurl $rt,$rd */
1097 1.1 christos {
1098 1.1 christos IQ2000_INSN_LURL, "lurl", "lurl", 32,
1099 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1100 1.1 christos },
1101 1.1 christos /* luulck $rt */
1102 1.1 christos {
1103 1.1 christos IQ2000_INSN_LUULCK, "luulck", "luulck", 32,
1104 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1105 1.1 christos },
1106 1.1 christos /* mfc0 $rt,$rd */
1107 1.1 christos {
1108 1.1 christos IQ2000_INSN_MFC0, "mfc0", "mfc0", 32,
1109 1.1 christos { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1110 1.1 christos },
1111 1.1 christos /* mfc1 $rt,$rd */
1112 1.1 christos {
1113 1.1 christos IQ2000_INSN_MFC1, "mfc1", "mfc1", 32,
1114 1.1 christos { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1115 1.1 christos },
1116 1.1 christos /* mfc2 $rt,$rd */
1117 1.1 christos {
1118 1.1 christos IQ2000_INSN_MFC2, "mfc2", "mfc2", 32,
1119 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1120 1.1 christos },
1121 1.1 christos /* mfc3 $rt,$rd */
1122 1.1 christos {
1123 1.1 christos IQ2000_INSN_MFC3, "mfc3", "mfc3", 32,
1124 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1125 1.1 christos },
1126 1.1 christos /* mtc0 $rt,$rd */
1127 1.1 christos {
1128 1.1 christos IQ2000_INSN_MTC0, "mtc0", "mtc0", 32,
1129 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1130 1.1 christos },
1131 1.1 christos /* mtc1 $rt,$rd */
1132 1.1 christos {
1133 1.1 christos IQ2000_INSN_MTC1, "mtc1", "mtc1", 32,
1134 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1135 1.1 christos },
1136 1.1 christos /* mtc2 $rt,$rd */
1137 1.1 christos {
1138 1.1 christos IQ2000_INSN_MTC2, "mtc2", "mtc2", 32,
1139 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1140 1.1 christos },
1141 1.1 christos /* mtc3 $rt,$rd */
1142 1.1 christos {
1143 1.1 christos IQ2000_INSN_MTC3, "mtc3", "mtc3", 32,
1144 1.1 christos { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1145 1.1 christos },
1146 1.1 christos /* pkrl $rd,$rt */
1147 1.1 christos {
1148 1.1 christos IQ2000_INSN_PKRL, "pkrl", "pkrl", 32,
1149 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1150 1.1 christos },
1151 1.1 christos /* pkrlr1 $rt,$_index,$count */
1152 1.1 christos {
1153 1.1 christos IQ2000_INSN_PKRLR1, "pkrlr1", "pkrlr1", 32,
1154 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1155 1.1 christos },
1156 1.1 christos /* pkrlr30 $rt,$_index,$count */
1157 1.1 christos {
1158 1.1 christos IQ2000_INSN_PKRLR30, "pkrlr30", "pkrlr30", 32,
1159 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1160 1.1 christos },
1161 1.1 christos /* rb $rd,$rt */
1162 1.1 christos {
1163 1.1 christos IQ2000_INSN_RB, "rb", "rb", 32,
1164 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1165 1.1 christos },
1166 1.1 christos /* rbr1 $rt,$_index,$count */
1167 1.1 christos {
1168 1.1 christos IQ2000_INSN_RBR1, "rbr1", "rbr1", 32,
1169 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1170 1.1 christos },
1171 1.1 christos /* rbr30 $rt,$_index,$count */
1172 1.1 christos {
1173 1.1 christos IQ2000_INSN_RBR30, "rbr30", "rbr30", 32,
1174 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1175 1.1 christos },
1176 1.1 christos /* rfe */
1177 1.1 christos {
1178 1.1 christos IQ2000_INSN_RFE, "rfe", "rfe", 32,
1179 1.1 christos { 0, { { { (1<<MACH_IQ2000), 0 } } } }
1180 1.1 christos },
1181 1.1 christos /* rx $rd,$rt */
1182 1.1 christos {
1183 1.1 christos IQ2000_INSN_RX, "rx", "rx", 32,
1184 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1185 1.1 christos },
1186 1.1 christos /* rxr1 $rt,$_index,$count */
1187 1.1 christos {
1188 1.1 christos IQ2000_INSN_RXR1, "rxr1", "rxr1", 32,
1189 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1190 1.1 christos },
1191 1.1 christos /* rxr30 $rt,$_index,$count */
1192 1.1 christos {
1193 1.1 christos IQ2000_INSN_RXR30, "rxr30", "rxr30", 32,
1194 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1195 1.1 christos },
1196 1.1 christos /* sleep */
1197 1.1 christos {
1198 1.1 christos IQ2000_INSN_SLEEP, "sleep", "sleep", 32,
1199 1.1 christos { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1200 1.1 christos },
1201 1.1 christos /* srrd $rt */
1202 1.1 christos {
1203 1.1 christos IQ2000_INSN_SRRD, "srrd", "srrd", 32,
1204 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1205 1.1 christos },
1206 1.1 christos /* srrdl $rt */
1207 1.1 christos {
1208 1.1 christos IQ2000_INSN_SRRDL, "srrdl", "srrdl", 32,
1209 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1210 1.1 christos },
1211 1.1 christos /* srulck $rt */
1212 1.1 christos {
1213 1.1 christos IQ2000_INSN_SRULCK, "srulck", "srulck", 32,
1214 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1215 1.1 christos },
1216 1.1 christos /* srwr $rt,$rd */
1217 1.1 christos {
1218 1.1 christos IQ2000_INSN_SRWR, "srwr", "srwr", 32,
1219 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1220 1.1 christos },
1221 1.1 christos /* srwru $rt,$rd */
1222 1.1 christos {
1223 1.1 christos IQ2000_INSN_SRWRU, "srwru", "srwru", 32,
1224 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1225 1.1 christos },
1226 1.1 christos /* trapqfl */
1227 1.1 christos {
1228 1.1 christos IQ2000_INSN_TRAPQFL, "trapqfl", "trapqfl", 32,
1229 1.1 christos { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1230 1.1 christos },
1231 1.1 christos /* trapqne */
1232 1.1 christos {
1233 1.1 christos IQ2000_INSN_TRAPQNE, "trapqne", "trapqne", 32,
1234 1.1 christos { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1235 1.1 christos },
1236 1.1 christos /* traprel $rt */
1237 1.1 christos {
1238 1.1 christos IQ2000_INSN_TRAPREL, "traprel", "traprel", 32,
1239 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1240 1.1 christos },
1241 1.1 christos /* wb $rd,$rt */
1242 1.1 christos {
1243 1.1 christos IQ2000_INSN_WB, "wb", "wb", 32,
1244 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1245 1.1 christos },
1246 1.1 christos /* wbu $rd,$rt */
1247 1.1 christos {
1248 1.1 christos IQ2000_INSN_WBU, "wbu", "wbu", 32,
1249 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1250 1.1 christos },
1251 1.1 christos /* wbr1 $rt,$_index,$count */
1252 1.1 christos {
1253 1.1 christos IQ2000_INSN_WBR1, "wbr1", "wbr1", 32,
1254 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1255 1.1 christos },
1256 1.1 christos /* wbr1u $rt,$_index,$count */
1257 1.1 christos {
1258 1.1 christos IQ2000_INSN_WBR1U, "wbr1u", "wbr1u", 32,
1259 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1260 1.1 christos },
1261 1.1 christos /* wbr30 $rt,$_index,$count */
1262 1.1 christos {
1263 1.1 christos IQ2000_INSN_WBR30, "wbr30", "wbr30", 32,
1264 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1265 1.1 christos },
1266 1.1 christos /* wbr30u $rt,$_index,$count */
1267 1.1 christos {
1268 1.1 christos IQ2000_INSN_WBR30U, "wbr30u", "wbr30u", 32,
1269 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1270 1.1 christos },
1271 1.1 christos /* wx $rd,$rt */
1272 1.1 christos {
1273 1.1 christos IQ2000_INSN_WX, "wx", "wx", 32,
1274 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1275 1.1 christos },
1276 1.1 christos /* wxu $rd,$rt */
1277 1.1 christos {
1278 1.1 christos IQ2000_INSN_WXU, "wxu", "wxu", 32,
1279 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1280 1.1 christos },
1281 1.1 christos /* wxr1 $rt,$_index,$count */
1282 1.1 christos {
1283 1.1 christos IQ2000_INSN_WXR1, "wxr1", "wxr1", 32,
1284 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1285 1.1 christos },
1286 1.1 christos /* wxr1u $rt,$_index,$count */
1287 1.1 christos {
1288 1.1 christos IQ2000_INSN_WXR1U, "wxr1u", "wxr1u", 32,
1289 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1290 1.1 christos },
1291 1.1 christos /* wxr30 $rt,$_index,$count */
1292 1.1 christos {
1293 1.1 christos IQ2000_INSN_WXR30, "wxr30", "wxr30", 32,
1294 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1295 1.1 christos },
1296 1.1 christos /* wxr30u $rt,$_index,$count */
1297 1.1 christos {
1298 1.1 christos IQ2000_INSN_WXR30U, "wxr30u", "wxr30u", 32,
1299 1.1 christos { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1300 1.1 christos },
1301 1.1 christos /* ldw $rt,$lo16($base) */
1302 1.1 christos {
1303 1.1 christos IQ2000_INSN_LDW, "ldw", "ldw", 32,
1304 1.1 christos { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
1305 1.1 christos },
1306 1.1 christos /* sdw $rt,$lo16($base) */
1307 1.1 christos {
1308 1.1 christos IQ2000_INSN_SDW, "sdw", "sdw", 32,
1309 1.1 christos { 0|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
1310 1.1 christos },
1311 1.1 christos /* j $jmptarg */
1312 1.1 christos {
1313 1.1 christos IQ2000_INSN_J, "j", "j", 32,
1314 1.1 christos { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1315 1.1 christos },
1316 1.1 christos /* jal $jmptarg */
1317 1.1 christos {
1318 1.1 christos IQ2000_INSN_JAL, "jal", "jal", 32,
1319 1.1 christos { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1320 1.1 christos },
1321 1.1 christos /* bmb $rs,$rt,$offset */
1322 1.1 christos {
1323 1.1 christos IQ2000_INSN_BMB, "bmb", "bmb", 32,
1324 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1325 1.1 christos },
1326 1.1 christos /* andoui $rt,$rs,$hi16 */
1327 1.1 christos {
1328 1.1 christos IQ2000_INSN_ANDOUI_Q10, "andoui-q10", "andoui", 32,
1329 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1330 1.1 christos },
1331 1.1 christos /* andoui ${rt-rs},$hi16 */
1332 1.1 christos {
1333 1.1 christos -1, "andoui2-q10", "andoui", 32,
1334 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1335 1.1 christos },
1336 1.1 christos /* orui $rt,$rs,$hi16 */
1337 1.1 christos {
1338 1.1 christos IQ2000_INSN_ORUI_Q10, "orui-q10", "orui", 32,
1339 1.1 christos { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1340 1.1 christos },
1341 1.1 christos /* orui ${rt-rs},$hi16 */
1342 1.1 christos {
1343 1.1 christos -1, "orui2-q10", "orui", 32,
1344 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1345 1.1 christos },
1346 1.1 christos /* mrgb $rd,$rs,$rt,$maskq10 */
1347 1.1 christos {
1348 1.1 christos IQ2000_INSN_MRGBQ10, "mrgbq10", "mrgb", 32,
1349 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1350 1.1 christos },
1351 1.1 christos /* mrgb ${rd-rs},$rt,$maskq10 */
1352 1.1 christos {
1353 1.1 christos -1, "mrgbq102", "mrgb", 32,
1354 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1355 1.1 christos },
1356 1.1 christos /* j $jmptarg */
1357 1.1 christos {
1358 1.1 christos IQ2000_INSN_JQ10, "jq10", "j", 32,
1359 1.1 christos { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1360 1.1 christos },
1361 1.1 christos /* jal $rt,$jmptarg */
1362 1.1 christos {
1363 1.1 christos IQ2000_INSN_JALQ10, "jalq10", "jal", 32,
1364 1.1 christos { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1365 1.1 christos },
1366 1.1 christos /* jal $jmptarg */
1367 1.1 christos {
1368 1.1 christos IQ2000_INSN_JALQ10_2, "jalq10-2", "jal", 32,
1369 1.1 christos { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1370 1.1 christos },
1371 1.1 christos /* bbil $rs($bitnum),$offset */
1372 1.1 christos {
1373 1.1 christos IQ2000_INSN_BBIL, "bbil", "bbil", 32,
1374 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1375 1.1 christos },
1376 1.1 christos /* bbinl $rs($bitnum),$offset */
1377 1.1 christos {
1378 1.1 christos IQ2000_INSN_BBINL, "bbinl", "bbinl", 32,
1379 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1380 1.1 christos },
1381 1.1 christos /* bbvl $rs,$rt,$offset */
1382 1.1 christos {
1383 1.1 christos IQ2000_INSN_BBVL, "bbvl", "bbvl", 32,
1384 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1385 1.1 christos },
1386 1.1 christos /* bbvnl $rs,$rt,$offset */
1387 1.1 christos {
1388 1.1 christos IQ2000_INSN_BBVNL, "bbvnl", "bbvnl", 32,
1389 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1390 1.1 christos },
1391 1.1 christos /* bgtzal $rs,$offset */
1392 1.1 christos {
1393 1.1 christos IQ2000_INSN_BGTZAL, "bgtzal", "bgtzal", 32,
1394 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1395 1.1 christos },
1396 1.1 christos /* bgtzall $rs,$offset */
1397 1.1 christos {
1398 1.1 christos IQ2000_INSN_BGTZALL, "bgtzall", "bgtzall", 32,
1399 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1400 1.1 christos },
1401 1.1 christos /* blezal $rs,$offset */
1402 1.1 christos {
1403 1.1 christos IQ2000_INSN_BLEZAL, "blezal", "blezal", 32,
1404 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1405 1.1 christos },
1406 1.1 christos /* blezall $rs,$offset */
1407 1.1 christos {
1408 1.1 christos IQ2000_INSN_BLEZALL, "blezall", "blezall", 32,
1409 1.1 christos { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1410 1.1 christos },
1411 1.1 christos /* bgtz $rs,$offset */
1412 1.1 christos {
1413 1.1 christos IQ2000_INSN_BGTZ_Q10, "bgtz-q10", "bgtz", 32,
1414 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1415 1.1 christos },
1416 1.1 christos /* bgtzl $rs,$offset */
1417 1.1 christos {
1418 1.1 christos IQ2000_INSN_BGTZL_Q10, "bgtzl-q10", "bgtzl", 32,
1419 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1420 1.1 christos },
1421 1.1 christos /* blez $rs,$offset */
1422 1.1 christos {
1423 1.1 christos IQ2000_INSN_BLEZ_Q10, "blez-q10", "blez", 32,
1424 1.1 christos { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1425 1.1 christos },
1426 1.1 christos /* blezl $rs,$offset */
1427 1.1 christos {
1428 1.1 christos IQ2000_INSN_BLEZL_Q10, "blezl-q10", "blezl", 32,
1429 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1430 1.1 christos },
1431 1.1 christos /* bmb $rs,$rt,$offset */
1432 1.1 christos {
1433 1.1 christos IQ2000_INSN_BMB_Q10, "bmb-q10", "bmb", 32,
1434 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1435 1.1 christos },
1436 1.1 christos /* bmbl $rs,$rt,$offset */
1437 1.1 christos {
1438 1.1 christos IQ2000_INSN_BMBL, "bmbl", "bmbl", 32,
1439 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1440 1.1 christos },
1441 1.1 christos /* bri $rs,$offset */
1442 1.1 christos {
1443 1.1 christos IQ2000_INSN_BRI, "bri", "bri", 32,
1444 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1445 1.1 christos },
1446 1.1 christos /* brv $rs,$offset */
1447 1.1 christos {
1448 1.1 christos IQ2000_INSN_BRV, "brv", "brv", 32,
1449 1.1 christos { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1450 1.1 christos },
1451 1.1 christos /* bctx $rs,$offset */
1452 1.1 christos {
1453 1.1 christos IQ2000_INSN_BCTX, "bctx", "bctx", 32,
1454 1.1 christos { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1455 1.1 christos },
1456 1.1 christos /* yield */
1457 1.1 christos {
1458 1.1 christos IQ2000_INSN_YIELD, "yield", "yield", 32,
1459 1.1 christos { 0, { { { (1<<MACH_IQ10), 0 } } } }
1460 1.1 christos },
1461 1.1 christos /* crc32 $rd,$rs,$rt */
1462 1.1 christos {
1463 1.1 christos IQ2000_INSN_CRC32, "crc32", "crc32", 32,
1464 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1465 1.1 christos },
1466 1.1 christos /* crc32b $rd,$rs,$rt */
1467 1.1 christos {
1468 1.1 christos IQ2000_INSN_CRC32B, "crc32b", "crc32b", 32,
1469 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1470 1.1 christos },
1471 1.1 christos /* cnt1s $rd,$rs */
1472 1.1 christos {
1473 1.1 christos IQ2000_INSN_CNT1S, "cnt1s", "cnt1s", 32,
1474 1.1 christos { 0|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1475 1.1 christos },
1476 1.1 christos /* avail $rd */
1477 1.1 christos {
1478 1.1 christos IQ2000_INSN_AVAIL, "avail", "avail", 32,
1479 1.1 christos { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1480 1.1 christos },
1481 1.1 christos /* free $rd,$rs */
1482 1.1 christos {
1483 1.1 christos IQ2000_INSN_FREE, "free", "free", 32,
1484 1.1 christos { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1485 1.1 christos },
1486 1.1 christos /* tstod $rd,$rs */
1487 1.1 christos {
1488 1.1 christos IQ2000_INSN_TSTOD, "tstod", "tstod", 32,
1489 1.1 christos { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1490 1.1 christos },
1491 1.1 christos /* cmphdr $rd */
1492 1.1 christos {
1493 1.1 christos IQ2000_INSN_CMPHDR, "cmphdr", "cmphdr", 32,
1494 1.1 christos { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1495 1.1 christos },
1496 1.1 christos /* mcid $rd,$rt */
1497 1.1 christos {
1498 1.1 christos IQ2000_INSN_MCID, "mcid", "mcid", 32,
1499 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1500 1.1 christos },
1501 1.1 christos /* dba $rd */
1502 1.1 christos {
1503 1.1 christos IQ2000_INSN_DBA, "dba", "dba", 32,
1504 1.1 christos { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1505 1.1 christos },
1506 1.1 christos /* dbd $rd,$rs,$rt */
1507 1.1 christos {
1508 1.1 christos IQ2000_INSN_DBD, "dbd", "dbd", 32,
1509 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1510 1.1 christos },
1511 1.1 christos /* dpwt $rd,$rs */
1512 1.1 christos {
1513 1.1 christos IQ2000_INSN_DPWT, "dpwt", "dpwt", 32,
1514 1.1 christos { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1515 1.1 christos },
1516 1.1 christos /* chkhdr $rd,$rs */
1517 1.1 christos {
1518 1.1 christos IQ2000_INSN_CHKHDRQ10, "chkhdrq10", "chkhdr", 32,
1519 1.1 christos { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1520 1.1 christos },
1521 1.1 christos /* rba $rd,$rs,$rt */
1522 1.1 christos {
1523 1.1 christos IQ2000_INSN_RBA, "rba", "rba", 32,
1524 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1525 1.1 christos },
1526 1.1 christos /* rbal $rd,$rs,$rt */
1527 1.1 christos {
1528 1.1 christos IQ2000_INSN_RBAL, "rbal", "rbal", 32,
1529 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1530 1.1 christos },
1531 1.1 christos /* rbar $rd,$rs,$rt */
1532 1.1 christos {
1533 1.1 christos IQ2000_INSN_RBAR, "rbar", "rbar", 32,
1534 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1535 1.1 christos },
1536 1.1 christos /* wba $rd,$rs,$rt */
1537 1.1 christos {
1538 1.1 christos IQ2000_INSN_WBA, "wba", "wba", 32,
1539 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1540 1.1 christos },
1541 1.1 christos /* wbau $rd,$rs,$rt */
1542 1.1 christos {
1543 1.1 christos IQ2000_INSN_WBAU, "wbau", "wbau", 32,
1544 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1545 1.1 christos },
1546 1.1 christos /* wbac $rd,$rs,$rt */
1547 1.1 christos {
1548 1.1 christos IQ2000_INSN_WBAC, "wbac", "wbac", 32,
1549 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1550 1.1 christos },
1551 1.1 christos /* rbi $rd,$rs,$rt,$bytecount */
1552 1.1 christos {
1553 1.1 christos IQ2000_INSN_RBI, "rbi", "rbi", 32,
1554 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1555 1.1 christos },
1556 1.1 christos /* rbil $rd,$rs,$rt,$bytecount */
1557 1.1 christos {
1558 1.1 christos IQ2000_INSN_RBIL, "rbil", "rbil", 32,
1559 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1560 1.1 christos },
1561 1.1 christos /* rbir $rd,$rs,$rt,$bytecount */
1562 1.1 christos {
1563 1.1 christos IQ2000_INSN_RBIR, "rbir", "rbir", 32,
1564 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1565 1.1 christos },
1566 1.1 christos /* wbi $rd,$rs,$rt,$bytecount */
1567 1.1 christos {
1568 1.1 christos IQ2000_INSN_WBI, "wbi", "wbi", 32,
1569 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1570 1.1 christos },
1571 1.1 christos /* wbic $rd,$rs,$rt,$bytecount */
1572 1.1 christos {
1573 1.1 christos IQ2000_INSN_WBIC, "wbic", "wbic", 32,
1574 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1575 1.1 christos },
1576 1.1 christos /* wbiu $rd,$rs,$rt,$bytecount */
1577 1.1 christos {
1578 1.1 christos IQ2000_INSN_WBIU, "wbiu", "wbiu", 32,
1579 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1580 1.1 christos },
1581 1.1 christos /* pkrli $rd,$rs,$rt,$bytecount */
1582 1.1 christos {
1583 1.1 christos IQ2000_INSN_PKRLI, "pkrli", "pkrli", 32,
1584 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1585 1.1 christos },
1586 1.1 christos /* pkrlih $rd,$rs,$rt,$bytecount */
1587 1.1 christos {
1588 1.1 christos IQ2000_INSN_PKRLIH, "pkrlih", "pkrlih", 32,
1589 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1590 1.1 christos },
1591 1.1 christos /* pkrliu $rd,$rs,$rt,$bytecount */
1592 1.1 christos {
1593 1.1 christos IQ2000_INSN_PKRLIU, "pkrliu", "pkrliu", 32,
1594 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1595 1.1 christos },
1596 1.1 christos /* pkrlic $rd,$rs,$rt,$bytecount */
1597 1.1 christos {
1598 1.1 christos IQ2000_INSN_PKRLIC, "pkrlic", "pkrlic", 32,
1599 1.1 christos { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1600 1.1 christos },
1601 1.1 christos /* pkrla $rd,$rs,$rt */
1602 1.1 christos {
1603 1.1 christos IQ2000_INSN_PKRLA, "pkrla", "pkrla", 32,
1604 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1605 1.1 christos },
1606 1.1 christos /* pkrlau $rd,$rs,$rt */
1607 1.1 christos {
1608 1.1 christos IQ2000_INSN_PKRLAU, "pkrlau", "pkrlau", 32,
1609 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1610 1.1 christos },
1611 1.1 christos /* pkrlah $rd,$rs,$rt */
1612 1.1 christos {
1613 1.1 christos IQ2000_INSN_PKRLAH, "pkrlah", "pkrlah", 32,
1614 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1615 1.1 christos },
1616 1.1 christos /* pkrlac $rd,$rs,$rt */
1617 1.1 christos {
1618 1.1 christos IQ2000_INSN_PKRLAC, "pkrlac", "pkrlac", 32,
1619 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1620 1.1 christos },
1621 1.1 christos /* lock $rd,$rt */
1622 1.1 christos {
1623 1.1 christos IQ2000_INSN_LOCK, "lock", "lock", 32,
1624 1.1 christos { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1625 1.1 christos },
1626 1.1 christos /* unlk $rd,$rt */
1627 1.1 christos {
1628 1.1 christos IQ2000_INSN_UNLK, "unlk", "unlk", 32,
1629 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1630 1.1 christos },
1631 1.1 christos /* swrd $rd,$rt */
1632 1.1 christos {
1633 1.1 christos IQ2000_INSN_SWRD, "swrd", "swrd", 32,
1634 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1635 1.1 christos },
1636 1.1 christos /* swrdl $rd,$rt */
1637 1.1 christos {
1638 1.1 christos IQ2000_INSN_SWRDL, "swrdl", "swrdl", 32,
1639 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1640 1.1 christos },
1641 1.1 christos /* swwr $rd,$rs,$rt */
1642 1.1 christos {
1643 1.1 christos IQ2000_INSN_SWWR, "swwr", "swwr", 32,
1644 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1645 1.1 christos },
1646 1.1 christos /* swwru $rd,$rs,$rt */
1647 1.1 christos {
1648 1.1 christos IQ2000_INSN_SWWRU, "swwru", "swwru", 32,
1649 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1650 1.1 christos },
1651 1.1 christos /* dwrd $rd,$rt */
1652 1.1 christos {
1653 1.1 christos IQ2000_INSN_DWRD, "dwrd", "dwrd", 32,
1654 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1655 1.1 christos },
1656 1.1 christos /* dwrdl $rd,$rt */
1657 1.1 christos {
1658 1.1 christos IQ2000_INSN_DWRDL, "dwrdl", "dwrdl", 32,
1659 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1660 1.1 christos },
1661 1.1 christos /* cam36 $rd,$rt,${cam-z},${cam-y} */
1662 1.1 christos {
1663 1.1 christos IQ2000_INSN_CAM36, "cam36", "cam36", 32,
1664 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1665 1.1 christos },
1666 1.1 christos /* cam72 $rd,$rt,${cam-y},${cam-z} */
1667 1.1 christos {
1668 1.1 christos IQ2000_INSN_CAM72, "cam72", "cam72", 32,
1669 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1670 1.1 christos },
1671 1.1 christos /* cam144 $rd,$rt,${cam-y},${cam-z} */
1672 1.1 christos {
1673 1.1 christos IQ2000_INSN_CAM144, "cam144", "cam144", 32,
1674 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1675 1.1 christos },
1676 1.1 christos /* cam288 $rd,$rt,${cam-y},${cam-z} */
1677 1.1 christos {
1678 1.1 christos IQ2000_INSN_CAM288, "cam288", "cam288", 32,
1679 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1680 1.1 christos },
1681 1.1 christos /* cm32and $rd,$rs,$rt */
1682 1.1 christos {
1683 1.1 christos IQ2000_INSN_CM32AND, "cm32and", "cm32and", 32,
1684 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1685 1.1 christos },
1686 1.1 christos /* cm32andn $rd,$rs,$rt */
1687 1.1 christos {
1688 1.1 christos IQ2000_INSN_CM32ANDN, "cm32andn", "cm32andn", 32,
1689 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1690 1.1 christos },
1691 1.1 christos /* cm32or $rd,$rs,$rt */
1692 1.1 christos {
1693 1.1 christos IQ2000_INSN_CM32OR, "cm32or", "cm32or", 32,
1694 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1695 1.1 christos },
1696 1.1 christos /* cm32ra $rd,$rs,$rt */
1697 1.1 christos {
1698 1.1 christos IQ2000_INSN_CM32RA, "cm32ra", "cm32ra", 32,
1699 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1700 1.1 christos },
1701 1.1 christos /* cm32rd $rd,$rt */
1702 1.1 christos {
1703 1.1 christos IQ2000_INSN_CM32RD, "cm32rd", "cm32rd", 32,
1704 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1705 1.1 christos },
1706 1.1 christos /* cm32ri $rd,$rt */
1707 1.1 christos {
1708 1.1 christos IQ2000_INSN_CM32RI, "cm32ri", "cm32ri", 32,
1709 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1710 1.1 christos },
1711 1.1 christos /* cm32rs $rd,$rs,$rt */
1712 1.1 christos {
1713 1.1 christos IQ2000_INSN_CM32RS, "cm32rs", "cm32rs", 32,
1714 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1715 1.1 christos },
1716 1.1 christos /* cm32sa $rd,$rs,$rt */
1717 1.1 christos {
1718 1.1 christos IQ2000_INSN_CM32SA, "cm32sa", "cm32sa", 32,
1719 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1720 1.1 christos },
1721 1.1 christos /* cm32sd $rd,$rt */
1722 1.1 christos {
1723 1.1 christos IQ2000_INSN_CM32SD, "cm32sd", "cm32sd", 32,
1724 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1725 1.1 christos },
1726 1.1 christos /* cm32si $rd,$rt */
1727 1.1 christos {
1728 1.1 christos IQ2000_INSN_CM32SI, "cm32si", "cm32si", 32,
1729 1.1 christos { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1730 1.1 christos },
1731 1.1 christos /* cm32ss $rd,$rs,$rt */
1732 1.1 christos {
1733 1.1 christos IQ2000_INSN_CM32SS, "cm32ss", "cm32ss", 32,
1734 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1735 1.1 christos },
1736 1.1 christos /* cm32xor $rd,$rs,$rt */
1737 1.1 christos {
1738 1.1 christos IQ2000_INSN_CM32XOR, "cm32xor", "cm32xor", 32,
1739 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1740 1.1 christos },
1741 1.1 christos /* cm64clr $rd,$rt */
1742 1.1 christos {
1743 1.1 christos IQ2000_INSN_CM64CLR, "cm64clr", "cm64clr", 32,
1744 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1745 1.1 christos },
1746 1.1 christos /* cm64ra $rd,$rs,$rt */
1747 1.1 christos {
1748 1.1 christos IQ2000_INSN_CM64RA, "cm64ra", "cm64ra", 32,
1749 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1750 1.1 christos },
1751 1.1 christos /* cm64rd $rd,$rt */
1752 1.1 christos {
1753 1.1 christos IQ2000_INSN_CM64RD, "cm64rd", "cm64rd", 32,
1754 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1755 1.1 christos },
1756 1.1 christos /* cm64ri $rd,$rt */
1757 1.1 christos {
1758 1.1 christos IQ2000_INSN_CM64RI, "cm64ri", "cm64ri", 32,
1759 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1760 1.1 christos },
1761 1.1 christos /* cm64ria2 $rd,$rs,$rt */
1762 1.1 christos {
1763 1.1 christos IQ2000_INSN_CM64RIA2, "cm64ria2", "cm64ria2", 32,
1764 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1765 1.1 christos },
1766 1.1 christos /* cm64rs $rd,$rs,$rt */
1767 1.1 christos {
1768 1.1 christos IQ2000_INSN_CM64RS, "cm64rs", "cm64rs", 32,
1769 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1770 1.1 christos },
1771 1.1 christos /* cm64sa $rd,$rs,$rt */
1772 1.1 christos {
1773 1.1 christos IQ2000_INSN_CM64SA, "cm64sa", "cm64sa", 32,
1774 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1775 1.1 christos },
1776 1.1 christos /* cm64sd $rd,$rt */
1777 1.1 christos {
1778 1.1 christos IQ2000_INSN_CM64SD, "cm64sd", "cm64sd", 32,
1779 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1780 1.1 christos },
1781 1.1 christos /* cm64si $rd,$rt */
1782 1.1 christos {
1783 1.1 christos IQ2000_INSN_CM64SI, "cm64si", "cm64si", 32,
1784 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1785 1.1 christos },
1786 1.1 christos /* cm64sia2 $rd,$rs,$rt */
1787 1.1 christos {
1788 1.1 christos IQ2000_INSN_CM64SIA2, "cm64sia2", "cm64sia2", 32,
1789 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1790 1.1 christos },
1791 1.1 christos /* cm64ss $rd,$rs,$rt */
1792 1.1 christos {
1793 1.1 christos IQ2000_INSN_CM64SS, "cm64ss", "cm64ss", 32,
1794 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1795 1.1 christos },
1796 1.1 christos /* cm128ria2 $rd,$rs,$rt */
1797 1.1 christos {
1798 1.1 christos IQ2000_INSN_CM128RIA2, "cm128ria2", "cm128ria2", 32,
1799 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1800 1.1 christos },
1801 1.1 christos /* cm128ria3 $rd,$rs,$rt,${cm-3z} */
1802 1.1 christos {
1803 1.1 christos IQ2000_INSN_CM128RIA3, "cm128ria3", "cm128ria3", 32,
1804 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1805 1.1 christos },
1806 1.1 christos /* cm128ria4 $rd,$rs,$rt,${cm-4z} */
1807 1.1 christos {
1808 1.1 christos IQ2000_INSN_CM128RIA4, "cm128ria4", "cm128ria4", 32,
1809 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1810 1.1 christos },
1811 1.1 christos /* cm128sia2 $rd,$rs,$rt */
1812 1.1 christos {
1813 1.1 christos IQ2000_INSN_CM128SIA2, "cm128sia2", "cm128sia2", 32,
1814 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1815 1.1 christos },
1816 1.1 christos /* cm128sia3 $rd,$rs,$rt,${cm-3z} */
1817 1.1 christos {
1818 1.1 christos IQ2000_INSN_CM128SIA3, "cm128sia3", "cm128sia3", 32,
1819 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1820 1.1 christos },
1821 1.1 christos /* cm128sia4 $rd,$rs,$rt,${cm-4z} */
1822 1.1 christos {
1823 1.1 christos IQ2000_INSN_CM128SIA4, "cm128sia4", "cm128sia4", 32,
1824 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1825 1.1 christos },
1826 1.1 christos /* cm128vsa $rd,$rs,$rt */
1827 1.1 christos {
1828 1.1 christos IQ2000_INSN_CM128VSA, "cm128vsa", "cm128vsa", 32,
1829 1.1 christos { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1830 1.1 christos },
1831 1.1 christos /* cfc $rd,$rt */
1832 1.1 christos {
1833 1.1 christos IQ2000_INSN_CFC, "cfc", "cfc", 32,
1834 1.1 christos { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ10), 0 } } } }
1835 1.1 christos },
1836 1.1 christos /* ctc $rs,$rt */
1837 1.1 christos {
1838 1.1 christos IQ2000_INSN_CTC, "ctc", "ctc", 32,
1839 1.1 christos { 0|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1840 1.1 christos },
1841 1.1 christos };
1842 1.1 christos
1843 1.1 christos #undef OP
1844 1.1 christos #undef A
1845 1.1 christos
1846 1.1 christos /* Initialize anything needed to be done once, before any cpu_open call. */
1847 1.1 christos
1848 1.1 christos static void
1849 1.1 christos init_tables (void)
1850 1.1 christos {
1851 1.1 christos }
1852 1.1 christos
1853 1.8 christos #ifndef opcodes_error_handler
1854 1.8 christos #define opcodes_error_handler(...) \
1855 1.8 christos fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
1856 1.8 christos #endif
1857 1.8 christos
1858 1.1 christos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
1859 1.1 christos static void build_hw_table (CGEN_CPU_TABLE *);
1860 1.1 christos static void build_ifield_table (CGEN_CPU_TABLE *);
1861 1.1 christos static void build_operand_table (CGEN_CPU_TABLE *);
1862 1.1 christos static void build_insn_table (CGEN_CPU_TABLE *);
1863 1.1 christos static void iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *);
1864 1.1 christos
1865 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to look up a mach via its bfd name. */
1866 1.1 christos
1867 1.1 christos static const CGEN_MACH *
1868 1.1 christos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1869 1.1 christos {
1870 1.1 christos while (table->name)
1871 1.1 christos {
1872 1.1 christos if (strcmp (name, table->bfd_name) == 0)
1873 1.1 christos return table;
1874 1.1 christos ++table;
1875 1.1 christos }
1876 1.7 christos return NULL;
1877 1.1 christos }
1878 1.1 christos
1879 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table. */
1880 1.1 christos
1881 1.1 christos static void
1882 1.1 christos build_hw_table (CGEN_CPU_TABLE *cd)
1883 1.1 christos {
1884 1.1 christos int i;
1885 1.1 christos int machs = cd->machs;
1886 1.1 christos const CGEN_HW_ENTRY *init = & iq2000_cgen_hw_table[0];
1887 1.1 christos /* MAX_HW is only an upper bound on the number of selected entries.
1888 1.1 christos However each entry is indexed by it's enum so there can be holes in
1889 1.1 christos the table. */
1890 1.1 christos const CGEN_HW_ENTRY **selected =
1891 1.1 christos (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1892 1.1 christos
1893 1.1 christos cd->hw_table.init_entries = init;
1894 1.1 christos cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1895 1.1 christos memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1896 1.1 christos /* ??? For now we just use machs to determine which ones we want. */
1897 1.1 christos for (i = 0; init[i].name != NULL; ++i)
1898 1.1 christos if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1899 1.1 christos & machs)
1900 1.1 christos selected[init[i].type] = &init[i];
1901 1.1 christos cd->hw_table.entries = selected;
1902 1.1 christos cd->hw_table.num_entries = MAX_HW;
1903 1.1 christos }
1904 1.1 christos
1905 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table. */
1906 1.1 christos
1907 1.1 christos static void
1908 1.1 christos build_ifield_table (CGEN_CPU_TABLE *cd)
1909 1.1 christos {
1910 1.1 christos cd->ifld_table = & iq2000_cgen_ifld_table[0];
1911 1.1 christos }
1912 1.1 christos
1913 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table. */
1914 1.1 christos
1915 1.1 christos static void
1916 1.1 christos build_operand_table (CGEN_CPU_TABLE *cd)
1917 1.1 christos {
1918 1.1 christos int i;
1919 1.1 christos int machs = cd->machs;
1920 1.1 christos const CGEN_OPERAND *init = & iq2000_cgen_operand_table[0];
1921 1.1 christos /* MAX_OPERANDS is only an upper bound on the number of selected entries.
1922 1.1 christos However each entry is indexed by it's enum so there can be holes in
1923 1.1 christos the table. */
1924 1.1 christos const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
1925 1.1 christos
1926 1.1 christos cd->operand_table.init_entries = init;
1927 1.1 christos cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
1928 1.1 christos memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
1929 1.1 christos /* ??? For now we just use mach to determine which ones we want. */
1930 1.1 christos for (i = 0; init[i].name != NULL; ++i)
1931 1.1 christos if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
1932 1.1 christos & machs)
1933 1.1 christos selected[init[i].type] = &init[i];
1934 1.1 christos cd->operand_table.entries = selected;
1935 1.1 christos cd->operand_table.num_entries = MAX_OPERANDS;
1936 1.1 christos }
1937 1.1 christos
1938 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.
1939 1.1 christos ??? This could leave out insns not supported by the specified mach/isa,
1940 1.1 christos but that would cause errors like "foo only supported by bar" to become
1941 1.1 christos "unknown insn", so for now we include all insns and require the app to
1942 1.1 christos do the checking later.
1943 1.1 christos ??? On the other hand, parsing of such insns may require their hardware or
1944 1.1 christos operand elements to be in the table [which they mightn't be]. */
1945 1.1 christos
1946 1.1 christos static void
1947 1.1 christos build_insn_table (CGEN_CPU_TABLE *cd)
1948 1.1 christos {
1949 1.1 christos int i;
1950 1.1 christos const CGEN_IBASE *ib = & iq2000_cgen_insn_table[0];
1951 1.1 christos CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
1952 1.1 christos
1953 1.1 christos memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
1954 1.1 christos for (i = 0; i < MAX_INSNS; ++i)
1955 1.1 christos insns[i].base = &ib[i];
1956 1.1 christos cd->insn_table.init_entries = insns;
1957 1.1 christos cd->insn_table.entry_size = sizeof (CGEN_IBASE);
1958 1.1 christos cd->insn_table.num_init_entries = MAX_INSNS;
1959 1.1 christos }
1960 1.1 christos
1961 1.1 christos /* Subroutine of iq2000_cgen_cpu_open to rebuild the tables. */
1962 1.1 christos
1963 1.1 christos static void
1964 1.1 christos iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
1965 1.1 christos {
1966 1.1 christos int i;
1967 1.1 christos CGEN_BITSET *isas = cd->isas;
1968 1.1 christos unsigned int machs = cd->machs;
1969 1.1 christos
1970 1.1 christos cd->int_insn_p = CGEN_INT_INSN_P;
1971 1.1 christos
1972 1.1 christos /* Data derived from the isa spec. */
1973 1.1 christos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
1974 1.1 christos cd->default_insn_bitsize = UNSET;
1975 1.1 christos cd->base_insn_bitsize = UNSET;
1976 1.1 christos cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
1977 1.1 christos cd->max_insn_bitsize = 0;
1978 1.1 christos for (i = 0; i < MAX_ISAS; ++i)
1979 1.1 christos if (cgen_bitset_contains (isas, i))
1980 1.1 christos {
1981 1.1 christos const CGEN_ISA *isa = & iq2000_cgen_isa_table[i];
1982 1.1 christos
1983 1.1 christos /* Default insn sizes of all selected isas must be
1984 1.1 christos equal or we set the result to 0, meaning "unknown". */
1985 1.1 christos if (cd->default_insn_bitsize == UNSET)
1986 1.1 christos cd->default_insn_bitsize = isa->default_insn_bitsize;
1987 1.1 christos else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
1988 1.1 christos ; /* This is ok. */
1989 1.1 christos else
1990 1.1 christos cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
1991 1.1 christos
1992 1.1 christos /* Base insn sizes of all selected isas must be equal
1993 1.1 christos or we set the result to 0, meaning "unknown". */
1994 1.1 christos if (cd->base_insn_bitsize == UNSET)
1995 1.1 christos cd->base_insn_bitsize = isa->base_insn_bitsize;
1996 1.1 christos else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
1997 1.1 christos ; /* This is ok. */
1998 1.1 christos else
1999 1.1 christos cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
2000 1.1 christos
2001 1.1 christos /* Set min,max insn sizes. */
2002 1.1 christos if (isa->min_insn_bitsize < cd->min_insn_bitsize)
2003 1.1 christos cd->min_insn_bitsize = isa->min_insn_bitsize;
2004 1.1 christos if (isa->max_insn_bitsize > cd->max_insn_bitsize)
2005 1.1 christos cd->max_insn_bitsize = isa->max_insn_bitsize;
2006 1.1 christos }
2007 1.1 christos
2008 1.1 christos /* Data derived from the mach spec. */
2009 1.1 christos for (i = 0; i < MAX_MACHS; ++i)
2010 1.1 christos if (((1 << i) & machs) != 0)
2011 1.1 christos {
2012 1.1 christos const CGEN_MACH *mach = & iq2000_cgen_mach_table[i];
2013 1.1 christos
2014 1.1 christos if (mach->insn_chunk_bitsize != 0)
2015 1.1 christos {
2016 1.1 christos if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
2017 1.1 christos {
2018 1.8 christos opcodes_error_handler
2019 1.8 christos (/* xgettext:c-format */
2020 1.8 christos _("internal error: iq2000_cgen_rebuild_tables: "
2021 1.8 christos "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
2022 1.8 christos cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
2023 1.1 christos abort ();
2024 1.1 christos }
2025 1.1 christos
2026 1.1 christos cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
2027 1.1 christos }
2028 1.1 christos }
2029 1.1 christos
2030 1.1 christos /* Determine which hw elements are used by MACH. */
2031 1.1 christos build_hw_table (cd);
2032 1.1 christos
2033 1.1 christos /* Build the ifield table. */
2034 1.1 christos build_ifield_table (cd);
2035 1.1 christos
2036 1.1 christos /* Determine which operands are used by MACH/ISA. */
2037 1.1 christos build_operand_table (cd);
2038 1.1 christos
2039 1.1 christos /* Build the instruction table. */
2040 1.1 christos build_insn_table (cd);
2041 1.1 christos }
2042 1.1 christos
2043 1.1 christos /* Initialize a cpu table and return a descriptor.
2044 1.1 christos It's much like opening a file, and must be the first function called.
2045 1.1 christos The arguments are a set of (type/value) pairs, terminated with
2046 1.1 christos CGEN_CPU_OPEN_END.
2047 1.1 christos
2048 1.1 christos Currently supported values:
2049 1.1 christos CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
2050 1.1 christos CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
2051 1.1 christos CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
2052 1.1 christos CGEN_CPU_OPEN_ENDIAN: specify endian choice
2053 1.1 christos CGEN_CPU_OPEN_END: terminates arguments
2054 1.1 christos
2055 1.1 christos ??? Simultaneous multiple isas might not make sense, but it's not (yet)
2056 1.1 christos precluded. */
2057 1.1 christos
2058 1.1 christos CGEN_CPU_DESC
2059 1.1 christos iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
2060 1.1 christos {
2061 1.1 christos CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
2062 1.1 christos static int init_p;
2063 1.1 christos CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
2064 1.1 christos unsigned int machs = 0; /* 0 = "unspecified" */
2065 1.1 christos enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
2066 1.1 christos va_list ap;
2067 1.1 christos
2068 1.1 christos if (! init_p)
2069 1.1 christos {
2070 1.1 christos init_tables ();
2071 1.1 christos init_p = 1;
2072 1.1 christos }
2073 1.1 christos
2074 1.1 christos memset (cd, 0, sizeof (*cd));
2075 1.1 christos
2076 1.1 christos va_start (ap, arg_type);
2077 1.1 christos while (arg_type != CGEN_CPU_OPEN_END)
2078 1.1 christos {
2079 1.1 christos switch (arg_type)
2080 1.1 christos {
2081 1.1 christos case CGEN_CPU_OPEN_ISAS :
2082 1.1 christos isas = va_arg (ap, CGEN_BITSET *);
2083 1.1 christos break;
2084 1.1 christos case CGEN_CPU_OPEN_MACHS :
2085 1.1 christos machs = va_arg (ap, unsigned int);
2086 1.1 christos break;
2087 1.1 christos case CGEN_CPU_OPEN_BFDMACH :
2088 1.1 christos {
2089 1.1 christos const char *name = va_arg (ap, const char *);
2090 1.1 christos const CGEN_MACH *mach =
2091 1.1 christos lookup_mach_via_bfd_name (iq2000_cgen_mach_table, name);
2092 1.1 christos
2093 1.7 christos if (mach != NULL)
2094 1.7 christos machs |= 1 << mach->num;
2095 1.1 christos break;
2096 1.1 christos }
2097 1.1 christos case CGEN_CPU_OPEN_ENDIAN :
2098 1.1 christos endian = va_arg (ap, enum cgen_endian);
2099 1.1 christos break;
2100 1.1 christos default :
2101 1.8 christos opcodes_error_handler
2102 1.8 christos (/* xgettext:c-format */
2103 1.8 christos _("internal error: iq2000_cgen_cpu_open: "
2104 1.8 christos "unsupported argument `%d'"),
2105 1.8 christos arg_type);
2106 1.1 christos abort (); /* ??? return NULL? */
2107 1.1 christos }
2108 1.1 christos arg_type = va_arg (ap, enum cgen_cpu_open_arg);
2109 1.1 christos }
2110 1.1 christos va_end (ap);
2111 1.1 christos
2112 1.1 christos /* Mach unspecified means "all". */
2113 1.1 christos if (machs == 0)
2114 1.1 christos machs = (1 << MAX_MACHS) - 1;
2115 1.1 christos /* Base mach is always selected. */
2116 1.1 christos machs |= 1;
2117 1.1 christos if (endian == CGEN_ENDIAN_UNKNOWN)
2118 1.1 christos {
2119 1.1 christos /* ??? If target has only one, could have a default. */
2120 1.8 christos opcodes_error_handler
2121 1.8 christos (/* xgettext:c-format */
2122 1.8 christos _("internal error: iq2000_cgen_cpu_open: no endianness specified"));
2123 1.1 christos abort ();
2124 1.1 christos }
2125 1.1 christos
2126 1.1 christos cd->isas = cgen_bitset_copy (isas);
2127 1.1 christos cd->machs = machs;
2128 1.1 christos cd->endian = endian;
2129 1.1 christos /* FIXME: for the sparc case we can determine insn-endianness statically.
2130 1.1 christos The worry here is where both data and insn endian can be independently
2131 1.1 christos chosen, in which case this function will need another argument.
2132 1.1 christos Actually, will want to allow for more arguments in the future anyway. */
2133 1.1 christos cd->insn_endian = endian;
2134 1.1 christos
2135 1.1 christos /* Table (re)builder. */
2136 1.1 christos cd->rebuild_tables = iq2000_cgen_rebuild_tables;
2137 1.1 christos iq2000_cgen_rebuild_tables (cd);
2138 1.1 christos
2139 1.1 christos /* Default to not allowing signed overflow. */
2140 1.1 christos cd->signed_overflow_ok_p = 0;
2141 1.6 christos
2142 1.1 christos return (CGEN_CPU_DESC) cd;
2143 1.1 christos }
2144 1.1 christos
2145 1.1 christos /* Cover fn to iq2000_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
2146 1.1 christos MACH_NAME is the bfd name of the mach. */
2147 1.1 christos
2148 1.1 christos CGEN_CPU_DESC
2149 1.1 christos iq2000_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
2150 1.1 christos {
2151 1.1 christos return iq2000_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
2152 1.1 christos CGEN_CPU_OPEN_ENDIAN, endian,
2153 1.1 christos CGEN_CPU_OPEN_END);
2154 1.1 christos }
2155 1.1 christos
2156 1.1 christos /* Close a cpu table.
2157 1.1 christos ??? This can live in a machine independent file, but there's currently
2158 1.1 christos no place to put this file (there's no libcgen). libopcodes is the wrong
2159 1.1 christos place as some simulator ports use this but they don't use libopcodes. */
2160 1.1 christos
2161 1.1 christos void
2162 1.1 christos iq2000_cgen_cpu_close (CGEN_CPU_DESC cd)
2163 1.1 christos {
2164 1.1 christos unsigned int i;
2165 1.1 christos const CGEN_INSN *insns;
2166 1.1 christos
2167 1.1 christos if (cd->macro_insn_table.init_entries)
2168 1.1 christos {
2169 1.1 christos insns = cd->macro_insn_table.init_entries;
2170 1.1 christos for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
2171 1.1 christos if (CGEN_INSN_RX ((insns)))
2172 1.1 christos regfree (CGEN_INSN_RX (insns));
2173 1.1 christos }
2174 1.1 christos
2175 1.1 christos if (cd->insn_table.init_entries)
2176 1.1 christos {
2177 1.1 christos insns = cd->insn_table.init_entries;
2178 1.1 christos for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
2179 1.1 christos if (CGEN_INSN_RX (insns))
2180 1.1 christos regfree (CGEN_INSN_RX (insns));
2181 1.6 christos }
2182 1.1 christos
2183 1.1 christos if (cd->macro_insn_table.init_entries)
2184 1.1 christos free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
2185 1.1 christos
2186 1.1 christos if (cd->insn_table.init_entries)
2187 1.1 christos free ((CGEN_INSN *) cd->insn_table.init_entries);
2188 1.1 christos
2189 1.1 christos if (cd->hw_table.entries)
2190 1.1 christos free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
2191 1.1 christos
2192 1.1 christos if (cd->operand_table.entries)
2193 1.1 christos free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
2194 1.1 christos
2195 1.1 christos free (cd);
2196 1.1 christos }
2197 1.1 christos
2198