lm32-opc.c revision 1.1.1.3 1 1.1 christos /* Instruction opcode table for lm32.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.1.1.3 christos Copyright (C) 1996-2016 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.1 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22 1.1 christos
23 1.1 christos */
24 1.1 christos
25 1.1 christos #include "sysdep.h"
26 1.1 christos #include "ansidecl.h"
27 1.1 christos #include "bfd.h"
28 1.1 christos #include "symcat.h"
29 1.1 christos #include "lm32-desc.h"
30 1.1 christos #include "lm32-opc.h"
31 1.1 christos #include "libiberty.h"
32 1.1 christos
33 1.1 christos /* The hash functions are recorded here to help keep assembler code out of
34 1.1 christos the disassembler and vice versa. */
35 1.1 christos
36 1.1 christos static int asm_hash_insn_p (const CGEN_INSN *);
37 1.1 christos static unsigned int asm_hash_insn (const char *);
38 1.1 christos static int dis_hash_insn_p (const CGEN_INSN *);
39 1.1 christos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
40 1.1 christos
41 1.1 christos /* Instruction formats. */
42 1.1 christos
43 1.1 christos #define F(f) & lm32_cgen_ifld_table[LM32_##f]
44 1.1 christos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
45 1.1 christos 0, 0, 0x0, { { 0 } }
46 1.1 christos };
47 1.1 christos
48 1.1 christos static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
49 1.1 christos 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
50 1.1 christos };
51 1.1 christos
52 1.1 christos static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
53 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
54 1.1 christos };
55 1.1 christos
56 1.1 christos static const CGEN_IFMT ifmt_andi ATTRIBUTE_UNUSED = {
57 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
58 1.1 christos };
59 1.1 christos
60 1.1 christos static const CGEN_IFMT ifmt_andhii ATTRIBUTE_UNUSED = {
61 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
62 1.1 christos };
63 1.1 christos
64 1.1 christos static const CGEN_IFMT ifmt_b ATTRIBUTE_UNUSED = {
65 1.1 christos 32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
66 1.1 christos };
67 1.1 christos
68 1.1 christos static const CGEN_IFMT ifmt_bi ATTRIBUTE_UNUSED = {
69 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_CALL) }, { 0 } }
70 1.1 christos };
71 1.1 christos
72 1.1 christos static const CGEN_IFMT ifmt_be ATTRIBUTE_UNUSED = {
73 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_BRANCH) }, { 0 } }
74 1.1 christos };
75 1.1 christos
76 1.1 christos static const CGEN_IFMT ifmt_ori ATTRIBUTE_UNUSED = {
77 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
78 1.1 christos };
79 1.1 christos
80 1.1 christos static const CGEN_IFMT ifmt_rcsr ATTRIBUTE_UNUSED = {
81 1.1 christos 32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
82 1.1 christos };
83 1.1 christos
84 1.1 christos static const CGEN_IFMT ifmt_sextb ATTRIBUTE_UNUSED = {
85 1.1 christos 32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
86 1.1 christos };
87 1.1 christos
88 1.1 christos static const CGEN_IFMT ifmt_user ATTRIBUTE_UNUSED = {
89 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_USER) }, { 0 } }
90 1.1 christos };
91 1.1 christos
92 1.1 christos static const CGEN_IFMT ifmt_wcsr ATTRIBUTE_UNUSED = {
93 1.1 christos 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
94 1.1 christos };
95 1.1 christos
96 1.1 christos static const CGEN_IFMT ifmt_break ATTRIBUTE_UNUSED = {
97 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_EXCEPTION) }, { 0 } }
98 1.1 christos };
99 1.1 christos
100 1.1 christos static const CGEN_IFMT ifmt_bret ATTRIBUTE_UNUSED = {
101 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
102 1.1 christos };
103 1.1 christos
104 1.1 christos static const CGEN_IFMT ifmt_mvi ATTRIBUTE_UNUSED = {
105 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
106 1.1 christos };
107 1.1 christos
108 1.1 christos static const CGEN_IFMT ifmt_mvui ATTRIBUTE_UNUSED = {
109 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
110 1.1 christos };
111 1.1 christos
112 1.1 christos static const CGEN_IFMT ifmt_mvhi ATTRIBUTE_UNUSED = {
113 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
114 1.1 christos };
115 1.1 christos
116 1.1 christos static const CGEN_IFMT ifmt_mva ATTRIBUTE_UNUSED = {
117 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
118 1.1 christos };
119 1.1 christos
120 1.1 christos static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
121 1.1 christos 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
122 1.1 christos };
123 1.1 christos
124 1.1 christos static const CGEN_IFMT ifmt_lwgotrel ATTRIBUTE_UNUSED = {
125 1.1 christos 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
126 1.1 christos };
127 1.1 christos
128 1.1 christos static const CGEN_IFMT ifmt_orhigotoffi ATTRIBUTE_UNUSED = {
129 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
130 1.1 christos };
131 1.1 christos
132 1.1 christos static const CGEN_IFMT ifmt_addgotoff ATTRIBUTE_UNUSED = {
133 1.1 christos 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
134 1.1 christos };
135 1.1 christos
136 1.1 christos #undef F
137 1.1 christos
138 1.1 christos #define A(a) (1 << CGEN_INSN_##a)
139 1.1 christos #define OPERAND(op) LM32_OPERAND_##op
140 1.1 christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
141 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
142 1.1 christos
143 1.1 christos /* The instruction table. */
144 1.1 christos
145 1.1 christos static const CGEN_OPCODE lm32_cgen_insn_opcode_table[MAX_INSNS] =
146 1.1 christos {
147 1.1 christos /* Special null first entry.
148 1.1 christos A `num' value of zero is thus invalid.
149 1.1 christos Also, the special `invalid' insn resides here. */
150 1.1 christos { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
151 1.1 christos /* add $r2,$r0,$r1 */
152 1.1 christos {
153 1.1 christos { 0, 0, 0, 0 },
154 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
155 1.1 christos & ifmt_add, { 0xb4000000 }
156 1.1 christos },
157 1.1 christos /* addi $r1,$r0,$imm */
158 1.1 christos {
159 1.1 christos { 0, 0, 0, 0 },
160 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
161 1.1 christos & ifmt_addi, { 0x34000000 }
162 1.1 christos },
163 1.1 christos /* and $r2,$r0,$r1 */
164 1.1 christos {
165 1.1 christos { 0, 0, 0, 0 },
166 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
167 1.1 christos & ifmt_add, { 0xa0000000 }
168 1.1 christos },
169 1.1 christos /* andi $r1,$r0,$uimm */
170 1.1 christos {
171 1.1 christos { 0, 0, 0, 0 },
172 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
173 1.1 christos & ifmt_andi, { 0x20000000 }
174 1.1 christos },
175 1.1 christos /* andhi $r1,$r0,$hi16 */
176 1.1 christos {
177 1.1 christos { 0, 0, 0, 0 },
178 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } },
179 1.1 christos & ifmt_andhii, { 0x60000000 }
180 1.1 christos },
181 1.1 christos /* b $r0 */
182 1.1 christos {
183 1.1 christos { 0, 0, 0, 0 },
184 1.1 christos { { MNEM, ' ', OP (R0), 0 } },
185 1.1 christos & ifmt_b, { 0xc0000000 }
186 1.1 christos },
187 1.1 christos /* bi $call */
188 1.1 christos {
189 1.1 christos { 0, 0, 0, 0 },
190 1.1 christos { { MNEM, ' ', OP (CALL), 0 } },
191 1.1 christos & ifmt_bi, { 0xe0000000 }
192 1.1 christos },
193 1.1 christos /* be $r0,$r1,$branch */
194 1.1 christos {
195 1.1 christos { 0, 0, 0, 0 },
196 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
197 1.1 christos & ifmt_be, { 0x44000000 }
198 1.1 christos },
199 1.1 christos /* bg $r0,$r1,$branch */
200 1.1 christos {
201 1.1 christos { 0, 0, 0, 0 },
202 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
203 1.1 christos & ifmt_be, { 0x48000000 }
204 1.1 christos },
205 1.1 christos /* bge $r0,$r1,$branch */
206 1.1 christos {
207 1.1 christos { 0, 0, 0, 0 },
208 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
209 1.1 christos & ifmt_be, { 0x4c000000 }
210 1.1 christos },
211 1.1 christos /* bgeu $r0,$r1,$branch */
212 1.1 christos {
213 1.1 christos { 0, 0, 0, 0 },
214 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
215 1.1 christos & ifmt_be, { 0x50000000 }
216 1.1 christos },
217 1.1 christos /* bgu $r0,$r1,$branch */
218 1.1 christos {
219 1.1 christos { 0, 0, 0, 0 },
220 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
221 1.1 christos & ifmt_be, { 0x54000000 }
222 1.1 christos },
223 1.1 christos /* bne $r0,$r1,$branch */
224 1.1 christos {
225 1.1 christos { 0, 0, 0, 0 },
226 1.1 christos { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
227 1.1 christos & ifmt_be, { 0x5c000000 }
228 1.1 christos },
229 1.1 christos /* call $r0 */
230 1.1 christos {
231 1.1 christos { 0, 0, 0, 0 },
232 1.1 christos { { MNEM, ' ', OP (R0), 0 } },
233 1.1 christos & ifmt_b, { 0xd8000000 }
234 1.1 christos },
235 1.1 christos /* calli $call */
236 1.1 christos {
237 1.1 christos { 0, 0, 0, 0 },
238 1.1 christos { { MNEM, ' ', OP (CALL), 0 } },
239 1.1 christos & ifmt_bi, { 0xf8000000 }
240 1.1 christos },
241 1.1 christos /* cmpe $r2,$r0,$r1 */
242 1.1 christos {
243 1.1 christos { 0, 0, 0, 0 },
244 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
245 1.1 christos & ifmt_add, { 0xe4000000 }
246 1.1 christos },
247 1.1 christos /* cmpei $r1,$r0,$imm */
248 1.1 christos {
249 1.1 christos { 0, 0, 0, 0 },
250 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
251 1.1 christos & ifmt_addi, { 0x64000000 }
252 1.1 christos },
253 1.1 christos /* cmpg $r2,$r0,$r1 */
254 1.1 christos {
255 1.1 christos { 0, 0, 0, 0 },
256 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
257 1.1 christos & ifmt_add, { 0xe8000000 }
258 1.1 christos },
259 1.1 christos /* cmpgi $r1,$r0,$imm */
260 1.1 christos {
261 1.1 christos { 0, 0, 0, 0 },
262 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
263 1.1 christos & ifmt_addi, { 0x68000000 }
264 1.1 christos },
265 1.1 christos /* cmpge $r2,$r0,$r1 */
266 1.1 christos {
267 1.1 christos { 0, 0, 0, 0 },
268 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
269 1.1 christos & ifmt_add, { 0xec000000 }
270 1.1 christos },
271 1.1 christos /* cmpgei $r1,$r0,$imm */
272 1.1 christos {
273 1.1 christos { 0, 0, 0, 0 },
274 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
275 1.1 christos & ifmt_addi, { 0x6c000000 }
276 1.1 christos },
277 1.1 christos /* cmpgeu $r2,$r0,$r1 */
278 1.1 christos {
279 1.1 christos { 0, 0, 0, 0 },
280 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
281 1.1 christos & ifmt_add, { 0xf0000000 }
282 1.1 christos },
283 1.1 christos /* cmpgeui $r1,$r0,$uimm */
284 1.1 christos {
285 1.1 christos { 0, 0, 0, 0 },
286 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
287 1.1 christos & ifmt_andi, { 0x70000000 }
288 1.1 christos },
289 1.1 christos /* cmpgu $r2,$r0,$r1 */
290 1.1 christos {
291 1.1 christos { 0, 0, 0, 0 },
292 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
293 1.1 christos & ifmt_add, { 0xf4000000 }
294 1.1 christos },
295 1.1 christos /* cmpgui $r1,$r0,$uimm */
296 1.1 christos {
297 1.1 christos { 0, 0, 0, 0 },
298 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
299 1.1 christos & ifmt_andi, { 0x74000000 }
300 1.1 christos },
301 1.1 christos /* cmpne $r2,$r0,$r1 */
302 1.1 christos {
303 1.1 christos { 0, 0, 0, 0 },
304 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
305 1.1 christos & ifmt_add, { 0xfc000000 }
306 1.1 christos },
307 1.1 christos /* cmpnei $r1,$r0,$imm */
308 1.1 christos {
309 1.1 christos { 0, 0, 0, 0 },
310 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
311 1.1 christos & ifmt_addi, { 0x7c000000 }
312 1.1 christos },
313 1.1 christos /* divu $r2,$r0,$r1 */
314 1.1 christos {
315 1.1 christos { 0, 0, 0, 0 },
316 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
317 1.1 christos & ifmt_add, { 0x8c000000 }
318 1.1 christos },
319 1.1 christos /* lb $r1,($r0+$imm) */
320 1.1 christos {
321 1.1 christos { 0, 0, 0, 0 },
322 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
323 1.1 christos & ifmt_addi, { 0x10000000 }
324 1.1 christos },
325 1.1 christos /* lbu $r1,($r0+$imm) */
326 1.1 christos {
327 1.1 christos { 0, 0, 0, 0 },
328 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
329 1.1 christos & ifmt_addi, { 0x40000000 }
330 1.1 christos },
331 1.1 christos /* lh $r1,($r0+$imm) */
332 1.1 christos {
333 1.1 christos { 0, 0, 0, 0 },
334 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
335 1.1 christos & ifmt_addi, { 0x1c000000 }
336 1.1 christos },
337 1.1 christos /* lhu $r1,($r0+$imm) */
338 1.1 christos {
339 1.1 christos { 0, 0, 0, 0 },
340 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
341 1.1 christos & ifmt_addi, { 0x2c000000 }
342 1.1 christos },
343 1.1 christos /* lw $r1,($r0+$imm) */
344 1.1 christos {
345 1.1 christos { 0, 0, 0, 0 },
346 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
347 1.1 christos & ifmt_addi, { 0x28000000 }
348 1.1 christos },
349 1.1 christos /* modu $r2,$r0,$r1 */
350 1.1 christos {
351 1.1 christos { 0, 0, 0, 0 },
352 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
353 1.1 christos & ifmt_add, { 0xc4000000 }
354 1.1 christos },
355 1.1 christos /* mul $r2,$r0,$r1 */
356 1.1 christos {
357 1.1 christos { 0, 0, 0, 0 },
358 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
359 1.1 christos & ifmt_add, { 0x88000000 }
360 1.1 christos },
361 1.1 christos /* muli $r1,$r0,$imm */
362 1.1 christos {
363 1.1 christos { 0, 0, 0, 0 },
364 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
365 1.1 christos & ifmt_addi, { 0x8000000 }
366 1.1 christos },
367 1.1 christos /* nor $r2,$r0,$r1 */
368 1.1 christos {
369 1.1 christos { 0, 0, 0, 0 },
370 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
371 1.1 christos & ifmt_add, { 0x84000000 }
372 1.1 christos },
373 1.1 christos /* nori $r1,$r0,$uimm */
374 1.1 christos {
375 1.1 christos { 0, 0, 0, 0 },
376 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
377 1.1 christos & ifmt_andi, { 0x4000000 }
378 1.1 christos },
379 1.1 christos /* or $r2,$r0,$r1 */
380 1.1 christos {
381 1.1 christos { 0, 0, 0, 0 },
382 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
383 1.1 christos & ifmt_add, { 0xb8000000 }
384 1.1 christos },
385 1.1 christos /* ori $r1,$r0,$lo16 */
386 1.1 christos {
387 1.1 christos { 0, 0, 0, 0 },
388 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (LO16), 0 } },
389 1.1 christos & ifmt_ori, { 0x38000000 }
390 1.1 christos },
391 1.1 christos /* orhi $r1,$r0,$hi16 */
392 1.1 christos {
393 1.1 christos { 0, 0, 0, 0 },
394 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } },
395 1.1 christos & ifmt_andhii, { 0x78000000 }
396 1.1 christos },
397 1.1 christos /* rcsr $r2,$csr */
398 1.1 christos {
399 1.1 christos { 0, 0, 0, 0 },
400 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (CSR), 0 } },
401 1.1 christos & ifmt_rcsr, { 0x90000000 }
402 1.1 christos },
403 1.1 christos /* sb ($r0+$imm),$r1 */
404 1.1 christos {
405 1.1 christos { 0, 0, 0, 0 },
406 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
407 1.1 christos & ifmt_addi, { 0x30000000 }
408 1.1 christos },
409 1.1 christos /* sextb $r2,$r0 */
410 1.1 christos {
411 1.1 christos { 0, 0, 0, 0 },
412 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
413 1.1 christos & ifmt_sextb, { 0xb0000000 }
414 1.1 christos },
415 1.1 christos /* sexth $r2,$r0 */
416 1.1 christos {
417 1.1 christos { 0, 0, 0, 0 },
418 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
419 1.1 christos & ifmt_sextb, { 0xdc000000 }
420 1.1 christos },
421 1.1 christos /* sh ($r0+$imm),$r1 */
422 1.1 christos {
423 1.1 christos { 0, 0, 0, 0 },
424 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
425 1.1 christos & ifmt_addi, { 0xc000000 }
426 1.1 christos },
427 1.1 christos /* sl $r2,$r0,$r1 */
428 1.1 christos {
429 1.1 christos { 0, 0, 0, 0 },
430 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
431 1.1 christos & ifmt_add, { 0xbc000000 }
432 1.1 christos },
433 1.1 christos /* sli $r1,$r0,$imm */
434 1.1 christos {
435 1.1 christos { 0, 0, 0, 0 },
436 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
437 1.1 christos & ifmt_addi, { 0x3c000000 }
438 1.1 christos },
439 1.1 christos /* sr $r2,$r0,$r1 */
440 1.1 christos {
441 1.1 christos { 0, 0, 0, 0 },
442 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
443 1.1 christos & ifmt_add, { 0x94000000 }
444 1.1 christos },
445 1.1 christos /* sri $r1,$r0,$imm */
446 1.1 christos {
447 1.1 christos { 0, 0, 0, 0 },
448 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
449 1.1 christos & ifmt_addi, { 0x14000000 }
450 1.1 christos },
451 1.1 christos /* sru $r2,$r0,$r1 */
452 1.1 christos {
453 1.1 christos { 0, 0, 0, 0 },
454 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
455 1.1 christos & ifmt_add, { 0x80000000 }
456 1.1 christos },
457 1.1 christos /* srui $r1,$r0,$imm */
458 1.1 christos {
459 1.1 christos { 0, 0, 0, 0 },
460 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
461 1.1 christos & ifmt_addi, { 0x0 }
462 1.1 christos },
463 1.1 christos /* sub $r2,$r0,$r1 */
464 1.1 christos {
465 1.1 christos { 0, 0, 0, 0 },
466 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
467 1.1 christos & ifmt_add, { 0xc8000000 }
468 1.1 christos },
469 1.1 christos /* sw ($r0+$imm),$r1 */
470 1.1 christos {
471 1.1 christos { 0, 0, 0, 0 },
472 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
473 1.1 christos & ifmt_addi, { 0x58000000 }
474 1.1 christos },
475 1.1 christos /* user $r2,$r0,$r1,$user */
476 1.1 christos {
477 1.1 christos { 0, 0, 0, 0 },
478 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), ',', OP (USER), 0 } },
479 1.1 christos & ifmt_user, { 0xcc000000 }
480 1.1 christos },
481 1.1 christos /* wcsr $csr,$r1 */
482 1.1 christos {
483 1.1 christos { 0, 0, 0, 0 },
484 1.1 christos { { MNEM, ' ', OP (CSR), ',', OP (R1), 0 } },
485 1.1 christos & ifmt_wcsr, { 0xd0000000 }
486 1.1 christos },
487 1.1 christos /* xor $r2,$r0,$r1 */
488 1.1 christos {
489 1.1 christos { 0, 0, 0, 0 },
490 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
491 1.1 christos & ifmt_add, { 0x98000000 }
492 1.1 christos },
493 1.1 christos /* xori $r1,$r0,$uimm */
494 1.1 christos {
495 1.1 christos { 0, 0, 0, 0 },
496 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
497 1.1 christos & ifmt_andi, { 0x18000000 }
498 1.1 christos },
499 1.1 christos /* xnor $r2,$r0,$r1 */
500 1.1 christos {
501 1.1 christos { 0, 0, 0, 0 },
502 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
503 1.1 christos & ifmt_add, { 0xa4000000 }
504 1.1 christos },
505 1.1 christos /* xnori $r1,$r0,$uimm */
506 1.1 christos {
507 1.1 christos { 0, 0, 0, 0 },
508 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
509 1.1 christos & ifmt_andi, { 0x24000000 }
510 1.1 christos },
511 1.1 christos /* break */
512 1.1 christos {
513 1.1 christos { 0, 0, 0, 0 },
514 1.1 christos { { MNEM, 0 } },
515 1.1 christos & ifmt_break, { 0xac000002 }
516 1.1 christos },
517 1.1 christos /* scall */
518 1.1 christos {
519 1.1 christos { 0, 0, 0, 0 },
520 1.1 christos { { MNEM, 0 } },
521 1.1 christos & ifmt_break, { 0xac000007 }
522 1.1 christos },
523 1.1 christos /* bret */
524 1.1 christos {
525 1.1 christos { 0, 0, 0, 0 },
526 1.1 christos { { MNEM, 0 } },
527 1.1 christos & ifmt_bret, { 0xc3e00000 }
528 1.1 christos },
529 1.1 christos /* eret */
530 1.1 christos {
531 1.1 christos { 0, 0, 0, 0 },
532 1.1 christos { { MNEM, 0 } },
533 1.1 christos & ifmt_bret, { 0xc3c00000 }
534 1.1 christos },
535 1.1 christos /* ret */
536 1.1 christos {
537 1.1 christos { 0, 0, 0, 0 },
538 1.1 christos { { MNEM, 0 } },
539 1.1 christos & ifmt_bret, { 0xc3a00000 }
540 1.1 christos },
541 1.1 christos /* mv $r2,$r0 */
542 1.1 christos {
543 1.1 christos { 0, 0, 0, 0 },
544 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
545 1.1 christos & ifmt_sextb, { 0xb8000000 }
546 1.1 christos },
547 1.1 christos /* mvi $r1,$imm */
548 1.1 christos {
549 1.1 christos { 0, 0, 0, 0 },
550 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (IMM), 0 } },
551 1.1 christos & ifmt_mvi, { 0x34000000 }
552 1.1 christos },
553 1.1 christos /* mvu $r1,$lo16 */
554 1.1 christos {
555 1.1 christos { 0, 0, 0, 0 },
556 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (LO16), 0 } },
557 1.1 christos & ifmt_mvui, { 0x38000000 }
558 1.1 christos },
559 1.1 christos /* mvhi $r1,$hi16 */
560 1.1 christos {
561 1.1 christos { 0, 0, 0, 0 },
562 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (HI16), 0 } },
563 1.1 christos & ifmt_mvhi, { 0x78000000 }
564 1.1 christos },
565 1.1 christos /* mva $r1,$gp16 */
566 1.1 christos {
567 1.1 christos { 0, 0, 0, 0 },
568 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
569 1.1 christos & ifmt_mva, { 0x37400000 }
570 1.1 christos },
571 1.1 christos /* not $r2,$r0 */
572 1.1 christos {
573 1.1 christos { 0, 0, 0, 0 },
574 1.1 christos { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
575 1.1 christos & ifmt_sextb, { 0xa4000000 }
576 1.1 christos },
577 1.1 christos /* nop */
578 1.1 christos {
579 1.1 christos { 0, 0, 0, 0 },
580 1.1 christos { { MNEM, 0 } },
581 1.1 christos & ifmt_nop, { 0x34000000 }
582 1.1 christos },
583 1.1 christos /* lb $r1,$gp16 */
584 1.1 christos {
585 1.1 christos { 0, 0, 0, 0 },
586 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
587 1.1 christos & ifmt_mva, { 0x13400000 }
588 1.1 christos },
589 1.1 christos /* lbu $r1,$gp16 */
590 1.1 christos {
591 1.1 christos { 0, 0, 0, 0 },
592 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
593 1.1 christos & ifmt_mva, { 0x43400000 }
594 1.1 christos },
595 1.1 christos /* lh $r1,$gp16 */
596 1.1 christos {
597 1.1 christos { 0, 0, 0, 0 },
598 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
599 1.1 christos & ifmt_mva, { 0x1f400000 }
600 1.1 christos },
601 1.1 christos /* lhu $r1,$gp16 */
602 1.1 christos {
603 1.1 christos { 0, 0, 0, 0 },
604 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
605 1.1 christos & ifmt_mva, { 0x2f400000 }
606 1.1 christos },
607 1.1 christos /* lw $r1,$gp16 */
608 1.1 christos {
609 1.1 christos { 0, 0, 0, 0 },
610 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
611 1.1 christos & ifmt_mva, { 0x2b400000 }
612 1.1 christos },
613 1.1 christos /* sb $gp16,$r1 */
614 1.1 christos {
615 1.1 christos { 0, 0, 0, 0 },
616 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
617 1.1 christos & ifmt_mva, { 0x33400000 }
618 1.1 christos },
619 1.1 christos /* sh $gp16,$r1 */
620 1.1 christos {
621 1.1 christos { 0, 0, 0, 0 },
622 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
623 1.1 christos & ifmt_mva, { 0xf400000 }
624 1.1 christos },
625 1.1 christos /* sw $gp16,$r1 */
626 1.1 christos {
627 1.1 christos { 0, 0, 0, 0 },
628 1.1 christos { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
629 1.1 christos & ifmt_mva, { 0x5b400000 }
630 1.1 christos },
631 1.1 christos /* lw $r1,(gp+$got16) */
632 1.1 christos {
633 1.1 christos { 0, 0, 0, 0 },
634 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', 'g', 'p', '+', OP (GOT16), ')', 0 } },
635 1.1 christos & ifmt_lwgotrel, { 0x2b400000 }
636 1.1 christos },
637 1.1 christos /* orhi $r1,$r0,$gotoffhi16 */
638 1.1 christos {
639 1.1 christos { 0, 0, 0, 0 },
640 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFHI16), 0 } },
641 1.1 christos & ifmt_orhigotoffi, { 0x78000000 }
642 1.1 christos },
643 1.1 christos /* addi $r1,$r0,$gotofflo16 */
644 1.1 christos {
645 1.1 christos { 0, 0, 0, 0 },
646 1.1 christos { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFLO16), 0 } },
647 1.1 christos & ifmt_addgotoff, { 0x34000000 }
648 1.1 christos },
649 1.1 christos /* sw ($r0+$gotofflo16),$r1 */
650 1.1 christos {
651 1.1 christos { 0, 0, 0, 0 },
652 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
653 1.1 christos & ifmt_addgotoff, { 0x58000000 }
654 1.1 christos },
655 1.1 christos /* lw $r1,($r0+$gotofflo16) */
656 1.1 christos {
657 1.1 christos { 0, 0, 0, 0 },
658 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
659 1.1 christos & ifmt_addgotoff, { 0x28000000 }
660 1.1 christos },
661 1.1 christos /* sh ($r0+$gotofflo16),$r1 */
662 1.1 christos {
663 1.1 christos { 0, 0, 0, 0 },
664 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
665 1.1 christos & ifmt_addgotoff, { 0xc000000 }
666 1.1 christos },
667 1.1 christos /* lh $r1,($r0+$gotofflo16) */
668 1.1 christos {
669 1.1 christos { 0, 0, 0, 0 },
670 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
671 1.1 christos & ifmt_addgotoff, { 0x1c000000 }
672 1.1 christos },
673 1.1 christos /* lhu $r1,($r0+$gotofflo16) */
674 1.1 christos {
675 1.1 christos { 0, 0, 0, 0 },
676 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
677 1.1 christos & ifmt_addgotoff, { 0x2c000000 }
678 1.1 christos },
679 1.1 christos /* sb ($r0+$gotofflo16),$r1 */
680 1.1 christos {
681 1.1 christos { 0, 0, 0, 0 },
682 1.1 christos { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
683 1.1 christos & ifmt_addgotoff, { 0x30000000 }
684 1.1 christos },
685 1.1 christos /* lb $r1,($r0+$gotofflo16) */
686 1.1 christos {
687 1.1 christos { 0, 0, 0, 0 },
688 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
689 1.1 christos & ifmt_addgotoff, { 0x10000000 }
690 1.1 christos },
691 1.1 christos /* lbu $r1,($r0+$gotofflo16) */
692 1.1 christos {
693 1.1 christos { 0, 0, 0, 0 },
694 1.1 christos { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
695 1.1 christos & ifmt_addgotoff, { 0x40000000 }
696 1.1 christos },
697 1.1 christos };
698 1.1 christos
699 1.1 christos #undef A
700 1.1 christos #undef OPERAND
701 1.1 christos #undef MNEM
702 1.1 christos #undef OP
703 1.1 christos
704 1.1 christos /* Formats for ALIAS macro-insns. */
705 1.1 christos
706 1.1 christos #define F(f) & lm32_cgen_ifld_table[LM32_##f]
707 1.1 christos #undef F
708 1.1 christos
709 1.1 christos /* Each non-simple macro entry points to an array of expansion possibilities. */
710 1.1 christos
711 1.1 christos #define A(a) (1 << CGEN_INSN_##a)
712 1.1 christos #define OPERAND(op) LM32_OPERAND_##op
713 1.1 christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
714 1.1 christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
715 1.1 christos
716 1.1 christos /* The macro instruction table. */
717 1.1 christos
718 1.1 christos static const CGEN_IBASE lm32_cgen_macro_insn_table[] =
719 1.1 christos {
720 1.1 christos };
721 1.1 christos
722 1.1 christos /* The macro instruction opcode table. */
723 1.1 christos
724 1.1 christos static const CGEN_OPCODE lm32_cgen_macro_insn_opcode_table[] =
725 1.1 christos {
726 1.1 christos };
727 1.1 christos
728 1.1 christos #undef A
729 1.1 christos #undef OPERAND
730 1.1 christos #undef MNEM
731 1.1 christos #undef OP
732 1.1 christos
733 1.1 christos #ifndef CGEN_ASM_HASH_P
734 1.1 christos #define CGEN_ASM_HASH_P(insn) 1
735 1.1 christos #endif
736 1.1 christos
737 1.1 christos #ifndef CGEN_DIS_HASH_P
738 1.1 christos #define CGEN_DIS_HASH_P(insn) 1
739 1.1 christos #endif
740 1.1 christos
741 1.1 christos /* Return non-zero if INSN is to be added to the hash table.
742 1.1 christos Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
743 1.1 christos
744 1.1 christos static int
745 1.1.1.3 christos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
746 1.1 christos {
747 1.1 christos return CGEN_ASM_HASH_P (insn);
748 1.1 christos }
749 1.1 christos
750 1.1 christos static int
751 1.1.1.3 christos dis_hash_insn_p (const CGEN_INSN *insn)
752 1.1 christos {
753 1.1 christos /* If building the hash table and the NO-DIS attribute is present,
754 1.1 christos ignore. */
755 1.1 christos if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
756 1.1 christos return 0;
757 1.1 christos return CGEN_DIS_HASH_P (insn);
758 1.1 christos }
759 1.1 christos
760 1.1 christos #ifndef CGEN_ASM_HASH
761 1.1 christos #define CGEN_ASM_HASH_SIZE 127
762 1.1 christos #ifdef CGEN_MNEMONIC_OPERANDS
763 1.1 christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
764 1.1 christos #else
765 1.1 christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
766 1.1 christos #endif
767 1.1 christos #endif
768 1.1 christos
769 1.1 christos /* It doesn't make much sense to provide a default here,
770 1.1 christos but while this is under development we do.
771 1.1 christos BUFFER is a pointer to the bytes of the insn, target order.
772 1.1 christos VALUE is the first base_insn_bitsize bits as an int in host order. */
773 1.1 christos
774 1.1 christos #ifndef CGEN_DIS_HASH
775 1.1 christos #define CGEN_DIS_HASH_SIZE 256
776 1.1 christos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
777 1.1 christos #endif
778 1.1 christos
779 1.1 christos /* The result is the hash value of the insn.
780 1.1 christos Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
781 1.1 christos
782 1.1 christos static unsigned int
783 1.1.1.3 christos asm_hash_insn (const char *mnem)
784 1.1 christos {
785 1.1 christos return CGEN_ASM_HASH (mnem);
786 1.1 christos }
787 1.1 christos
788 1.1 christos /* BUF is a pointer to the bytes of the insn, target order.
789 1.1 christos VALUE is the first base_insn_bitsize bits as an int in host order. */
790 1.1 christos
791 1.1 christos static unsigned int
792 1.1.1.3 christos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
793 1.1.1.3 christos CGEN_INSN_INT value ATTRIBUTE_UNUSED)
794 1.1 christos {
795 1.1 christos return CGEN_DIS_HASH (buf, value);
796 1.1 christos }
797 1.1 christos
798 1.1 christos /* Set the recorded length of the insn in the CGEN_FIELDS struct. */
799 1.1 christos
800 1.1 christos static void
801 1.1 christos set_fields_bitsize (CGEN_FIELDS *fields, int size)
802 1.1 christos {
803 1.1 christos CGEN_FIELDS_BITSIZE (fields) = size;
804 1.1 christos }
805 1.1 christos
806 1.1 christos /* Function to call before using the operand instance table.
807 1.1 christos This plugs the opcode entries and macro instructions into the cpu table. */
808 1.1 christos
809 1.1 christos void
810 1.1 christos lm32_cgen_init_opcode_table (CGEN_CPU_DESC cd)
811 1.1 christos {
812 1.1 christos int i;
813 1.1 christos int num_macros = (sizeof (lm32_cgen_macro_insn_table) /
814 1.1 christos sizeof (lm32_cgen_macro_insn_table[0]));
815 1.1 christos const CGEN_IBASE *ib = & lm32_cgen_macro_insn_table[0];
816 1.1 christos const CGEN_OPCODE *oc = & lm32_cgen_macro_insn_opcode_table[0];
817 1.1 christos CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
818 1.1 christos
819 1.1 christos /* This test has been added to avoid a warning generated
820 1.1 christos if memset is called with a third argument of value zero. */
821 1.1 christos if (num_macros >= 1)
822 1.1 christos memset (insns, 0, num_macros * sizeof (CGEN_INSN));
823 1.1 christos for (i = 0; i < num_macros; ++i)
824 1.1 christos {
825 1.1 christos insns[i].base = &ib[i];
826 1.1 christos insns[i].opcode = &oc[i];
827 1.1 christos lm32_cgen_build_insn_regex (& insns[i]);
828 1.1 christos }
829 1.1 christos cd->macro_insn_table.init_entries = insns;
830 1.1 christos cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
831 1.1 christos cd->macro_insn_table.num_init_entries = num_macros;
832 1.1 christos
833 1.1 christos oc = & lm32_cgen_insn_opcode_table[0];
834 1.1 christos insns = (CGEN_INSN *) cd->insn_table.init_entries;
835 1.1 christos for (i = 0; i < MAX_INSNS; ++i)
836 1.1 christos {
837 1.1 christos insns[i].opcode = &oc[i];
838 1.1 christos lm32_cgen_build_insn_regex (& insns[i]);
839 1.1 christos }
840 1.1 christos
841 1.1 christos cd->sizeof_fields = sizeof (CGEN_FIELDS);
842 1.1 christos cd->set_fields_bitsize = set_fields_bitsize;
843 1.1 christos
844 1.1 christos cd->asm_hash_p = asm_hash_insn_p;
845 1.1 christos cd->asm_hash = asm_hash_insn;
846 1.1 christos cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
847 1.1 christos
848 1.1 christos cd->dis_hash_p = dis_hash_insn_p;
849 1.1 christos cd->dis_hash = dis_hash_insn;
850 1.1 christos cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
851 1.1 christos }
852