or1k: Add the l.adrp insn and supporting relocations
[deliverable/binutils-gdb.git] / opcodes / or1k-opc.c
1 /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 /* Instruction opcode table for or1k.
3
4 THIS FILE IS MACHINE GENERATED WITH CGEN.
5
6 Copyright (C) 1996-2018 Free Software Foundation, Inc.
7
8 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9
10 This file is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 It is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 License for more details.
19
20 You should have received a copy of the GNU General Public License along
21 with this program; if not, write to the Free Software Foundation, Inc.,
22 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23
24 */
25
26 #include "sysdep.h"
27 #include "ansidecl.h"
28 #include "bfd.h"
29 #include "symcat.h"
30 #include "or1k-desc.h"
31 #include "or1k-opc.h"
32 #include "libiberty.h"
33
34 /* -- opc.c */
35 /* -- */
36 /* The hash functions are recorded here to help keep assembler code out of
37 the disassembler and vice versa. */
38
39 static int asm_hash_insn_p (const CGEN_INSN *);
40 static unsigned int asm_hash_insn (const char *);
41 static int dis_hash_insn_p (const CGEN_INSN *);
42 static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
43
44 /* Instruction formats. */
45
46 #define F(f) & or1k_cgen_ifld_table[OR1K_##f]
47 static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
48 0, 0, 0x0, { { 0 } }
49 };
50
51 static const CGEN_IFMT ifmt_l_j ATTRIBUTE_UNUSED = {
52 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_DISP26) }, { 0 } }
53 };
54
55 static const CGEN_IFMT ifmt_l_adrp ATTRIBUTE_UNUSED = {
56 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_DISP21) }, { 0 } }
57 };
58
59 static const CGEN_IFMT ifmt_l_jr ATTRIBUTE_UNUSED = {
60 32, 32, 0xffff07ff, { { F (F_OPCODE) }, { F (F_RESV_25_10) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } }
61 };
62
63 static const CGEN_IFMT ifmt_l_trap ATTRIBUTE_UNUSED = {
64 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_5) }, { F (F_UIMM16) }, { 0 } }
65 };
66
67 static const CGEN_IFMT ifmt_l_msync ATTRIBUTE_UNUSED = {
68 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_21) }, { 0 } }
69 };
70
71 static const CGEN_IFMT ifmt_l_rfe ATTRIBUTE_UNUSED = {
72 32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_RESV_25_26) }, { 0 } }
73 };
74
75 static const CGEN_IFMT ifmt_l_nop_imm ATTRIBUTE_UNUSED = {
76 32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_2) }, { F (F_RESV_23_8) }, { F (F_UIMM16) }, { 0 } }
77 };
78
79 static const CGEN_IFMT ifmt_l_movhi ATTRIBUTE_UNUSED = {
80 32, 32, 0xfc1f0000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } }
81 };
82
83 static const CGEN_IFMT ifmt_l_macrc ATTRIBUTE_UNUSED = {
84 32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } }
85 };
86
87 static const CGEN_IFMT ifmt_l_mfspr ATTRIBUTE_UNUSED = {
88 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
89 };
90
91 static const CGEN_IFMT ifmt_l_mtspr ATTRIBUTE_UNUSED = {
92 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_UIMM16_SPLIT) }, { 0 } }
93 };
94
95 static const CGEN_IFMT ifmt_l_lwz ATTRIBUTE_UNUSED = {
96 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
97 };
98
99 static const CGEN_IFMT ifmt_l_sw ATTRIBUTE_UNUSED = {
100 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16_SPLIT) }, { 0 } }
101 };
102
103 static const CGEN_IFMT ifmt_l_swa ATTRIBUTE_UNUSED = {
104 32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16) }, { 0 } }
105 };
106
107 static const CGEN_IFMT ifmt_l_sll ATTRIBUTE_UNUSED = {
108 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_2) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } }
109 };
110
111 static const CGEN_IFMT ifmt_l_slli ATTRIBUTE_UNUSED = {
112 32, 32, 0xfc00ffc0, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_8) }, { F (F_OP_7_2) }, { F (F_UIMM6) }, { 0 } }
113 };
114
115 static const CGEN_IFMT ifmt_l_and ATTRIBUTE_UNUSED = {
116 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } }
117 };
118
119 static const CGEN_IFMT ifmt_l_exths ATTRIBUTE_UNUSED = {
120 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_6) }, { F (F_OP_9_4) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } }
121 };
122
123 static const CGEN_IFMT ifmt_l_cmov ATTRIBUTE_UNUSED = {
124 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_1) }, { F (F_OP_9_2) }, { F (F_RESV_7_4) }, { F (F_OP_3_4) }, { 0 } }
125 };
126
127 static const CGEN_IFMT ifmt_l_sfgts ATTRIBUTE_UNUSED = {
128 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } }
129 };
130
131 static const CGEN_IFMT ifmt_l_sfgtsi ATTRIBUTE_UNUSED = {
132 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
133 };
134
135 static const CGEN_IFMT ifmt_l_mac ATTRIBUTE_UNUSED = {
136 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } }
137 };
138
139 static const CGEN_IFMT ifmt_l_maci ATTRIBUTE_UNUSED = {
140 32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
141 };
142
143 static const CGEN_IFMT ifmt_lf_add_s ATTRIBUTE_UNUSED = {
144 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
145 };
146
147 static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = {
148 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
149 };
150
151 static const CGEN_IFMT ifmt_lf_itof_s ATTRIBUTE_UNUSED = {
152 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
153 };
154
155 static const CGEN_IFMT ifmt_lf_ftoi_s ATTRIBUTE_UNUSED = {
156 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
157 };
158
159 static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = {
160 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
161 };
162
163 static const CGEN_IFMT ifmt_lf_eq_s ATTRIBUTE_UNUSED = {
164 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
165 };
166
167 static const CGEN_IFMT ifmt_lf_cust1_s ATTRIBUTE_UNUSED = {
168 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
169 };
170
171 static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = {
172 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
173 };
174
175 #undef F
176
177 #define A(a) (1 << CGEN_INSN_##a)
178 #define OPERAND(op) OR1K_OPERAND_##op
179 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
180 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
181
182 /* The instruction table. */
183
184 static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] =
185 {
186 /* Special null first entry.
187 A `num' value of zero is thus invalid.
188 Also, the special `invalid' insn resides here. */
189 { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
190 /* l.j ${disp26} */
191 {
192 { 0, 0, 0, 0 },
193 { { MNEM, ' ', OP (DISP26), 0 } },
194 & ifmt_l_j, { 0x0 }
195 },
196 /* l.adrp $rD,${disp21} */
197 {
198 { 0, 0, 0, 0 },
199 { { MNEM, ' ', OP (RD), ',', OP (DISP21), 0 } },
200 & ifmt_l_adrp, { 0x8000000 }
201 },
202 /* l.jal ${disp26} */
203 {
204 { 0, 0, 0, 0 },
205 { { MNEM, ' ', OP (DISP26), 0 } },
206 & ifmt_l_j, { 0x4000000 }
207 },
208 /* l.jr $rB */
209 {
210 { 0, 0, 0, 0 },
211 { { MNEM, ' ', OP (RB), 0 } },
212 & ifmt_l_jr, { 0x44000000 }
213 },
214 /* l.jalr $rB */
215 {
216 { 0, 0, 0, 0 },
217 { { MNEM, ' ', OP (RB), 0 } },
218 & ifmt_l_jr, { 0x48000000 }
219 },
220 /* l.bnf ${disp26} */
221 {
222 { 0, 0, 0, 0 },
223 { { MNEM, ' ', OP (DISP26), 0 } },
224 & ifmt_l_j, { 0xc000000 }
225 },
226 /* l.bf ${disp26} */
227 {
228 { 0, 0, 0, 0 },
229 { { MNEM, ' ', OP (DISP26), 0 } },
230 & ifmt_l_j, { 0x10000000 }
231 },
232 /* l.trap ${uimm16} */
233 {
234 { 0, 0, 0, 0 },
235 { { MNEM, ' ', OP (UIMM16), 0 } },
236 & ifmt_l_trap, { 0x21000000 }
237 },
238 /* l.sys ${uimm16} */
239 {
240 { 0, 0, 0, 0 },
241 { { MNEM, ' ', OP (UIMM16), 0 } },
242 & ifmt_l_trap, { 0x20000000 }
243 },
244 /* l.msync */
245 {
246 { 0, 0, 0, 0 },
247 { { MNEM, 0 } },
248 & ifmt_l_msync, { 0x22000000 }
249 },
250 /* l.psync */
251 {
252 { 0, 0, 0, 0 },
253 { { MNEM, 0 } },
254 & ifmt_l_msync, { 0x22800000 }
255 },
256 /* l.csync */
257 {
258 { 0, 0, 0, 0 },
259 { { MNEM, 0 } },
260 & ifmt_l_msync, { 0x23000000 }
261 },
262 /* l.rfe */
263 {
264 { 0, 0, 0, 0 },
265 { { MNEM, 0 } },
266 & ifmt_l_rfe, { 0x24000000 }
267 },
268 /* l.nop ${uimm16} */
269 {
270 { 0, 0, 0, 0 },
271 { { MNEM, ' ', OP (UIMM16), 0 } },
272 & ifmt_l_nop_imm, { 0x15000000 }
273 },
274 /* l.nop */
275 {
276 { 0, 0, 0, 0 },
277 { { MNEM, 0 } },
278 & ifmt_l_nop_imm, { 0x15000000 }
279 },
280 /* l.movhi $rD,$uimm16 */
281 {
282 { 0, 0, 0, 0 },
283 { { MNEM, ' ', OP (RD), ',', OP (UIMM16), 0 } },
284 & ifmt_l_movhi, { 0x18000000 }
285 },
286 /* l.macrc $rD */
287 {
288 { 0, 0, 0, 0 },
289 { { MNEM, ' ', OP (RD), 0 } },
290 & ifmt_l_macrc, { 0x18010000 }
291 },
292 /* l.mfspr $rD,$rA,${uimm16} */
293 {
294 { 0, 0, 0, 0 },
295 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
296 & ifmt_l_mfspr, { 0xb4000000 }
297 },
298 /* l.mtspr $rA,$rB,${uimm16-split} */
299 {
300 { 0, 0, 0, 0 },
301 { { MNEM, ' ', OP (RA), ',', OP (RB), ',', OP (UIMM16_SPLIT), 0 } },
302 & ifmt_l_mtspr, { 0xc0000000 }
303 },
304 /* l.lwz $rD,${simm16}($rA) */
305 {
306 { 0, 0, 0, 0 },
307 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
308 & ifmt_l_lwz, { 0x84000000 }
309 },
310 /* l.lws $rD,${simm16}($rA) */
311 {
312 { 0, 0, 0, 0 },
313 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
314 & ifmt_l_lwz, { 0x88000000 }
315 },
316 /* l.lwa $rD,${simm16}($rA) */
317 {
318 { 0, 0, 0, 0 },
319 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
320 & ifmt_l_lwz, { 0x6c000000 }
321 },
322 /* l.lbz $rD,${simm16}($rA) */
323 {
324 { 0, 0, 0, 0 },
325 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
326 & ifmt_l_lwz, { 0x8c000000 }
327 },
328 /* l.lbs $rD,${simm16}($rA) */
329 {
330 { 0, 0, 0, 0 },
331 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
332 & ifmt_l_lwz, { 0x90000000 }
333 },
334 /* l.lhz $rD,${simm16}($rA) */
335 {
336 { 0, 0, 0, 0 },
337 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
338 & ifmt_l_lwz, { 0x94000000 }
339 },
340 /* l.lhs $rD,${simm16}($rA) */
341 {
342 { 0, 0, 0, 0 },
343 { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
344 & ifmt_l_lwz, { 0x98000000 }
345 },
346 /* l.sw ${simm16-split}($rA),$rB */
347 {
348 { 0, 0, 0, 0 },
349 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
350 & ifmt_l_sw, { 0xd4000000 }
351 },
352 /* l.sb ${simm16-split}($rA),$rB */
353 {
354 { 0, 0, 0, 0 },
355 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
356 & ifmt_l_sw, { 0xd8000000 }
357 },
358 /* l.sh ${simm16-split}($rA),$rB */
359 {
360 { 0, 0, 0, 0 },
361 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
362 & ifmt_l_sw, { 0xdc000000 }
363 },
364 /* l.swa ${simm16-split}($rA),$rB */
365 {
366 { 0, 0, 0, 0 },
367 { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
368 & ifmt_l_swa, { 0xcc000000 }
369 },
370 /* l.sll $rD,$rA,$rB */
371 {
372 { 0, 0, 0, 0 },
373 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
374 & ifmt_l_sll, { 0xe0000008 }
375 },
376 /* l.slli $rD,$rA,${uimm6} */
377 {
378 { 0, 0, 0, 0 },
379 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
380 & ifmt_l_slli, { 0xb8000000 }
381 },
382 /* l.srl $rD,$rA,$rB */
383 {
384 { 0, 0, 0, 0 },
385 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
386 & ifmt_l_sll, { 0xe0000048 }
387 },
388 /* l.srli $rD,$rA,${uimm6} */
389 {
390 { 0, 0, 0, 0 },
391 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
392 & ifmt_l_slli, { 0xb8000040 }
393 },
394 /* l.sra $rD,$rA,$rB */
395 {
396 { 0, 0, 0, 0 },
397 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
398 & ifmt_l_sll, { 0xe0000088 }
399 },
400 /* l.srai $rD,$rA,${uimm6} */
401 {
402 { 0, 0, 0, 0 },
403 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
404 & ifmt_l_slli, { 0xb8000080 }
405 },
406 /* l.ror $rD,$rA,$rB */
407 {
408 { 0, 0, 0, 0 },
409 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
410 & ifmt_l_sll, { 0xe00000c8 }
411 },
412 /* l.rori $rD,$rA,${uimm6} */
413 {
414 { 0, 0, 0, 0 },
415 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
416 & ifmt_l_slli, { 0xb80000c0 }
417 },
418 /* l.and $rD,$rA,$rB */
419 {
420 { 0, 0, 0, 0 },
421 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
422 & ifmt_l_and, { 0xe0000003 }
423 },
424 /* l.or $rD,$rA,$rB */
425 {
426 { 0, 0, 0, 0 },
427 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
428 & ifmt_l_and, { 0xe0000004 }
429 },
430 /* l.xor $rD,$rA,$rB */
431 {
432 { 0, 0, 0, 0 },
433 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
434 & ifmt_l_and, { 0xe0000005 }
435 },
436 /* l.add $rD,$rA,$rB */
437 {
438 { 0, 0, 0, 0 },
439 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
440 & ifmt_l_and, { 0xe0000000 }
441 },
442 /* l.sub $rD,$rA,$rB */
443 {
444 { 0, 0, 0, 0 },
445 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
446 & ifmt_l_and, { 0xe0000002 }
447 },
448 /* l.addc $rD,$rA,$rB */
449 {
450 { 0, 0, 0, 0 },
451 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
452 & ifmt_l_and, { 0xe0000001 }
453 },
454 /* l.mul $rD,$rA,$rB */
455 {
456 { 0, 0, 0, 0 },
457 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
458 & ifmt_l_and, { 0xe0000306 }
459 },
460 /* l.mulu $rD,$rA,$rB */
461 {
462 { 0, 0, 0, 0 },
463 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
464 & ifmt_l_and, { 0xe000030b }
465 },
466 /* l.div $rD,$rA,$rB */
467 {
468 { 0, 0, 0, 0 },
469 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
470 & ifmt_l_and, { 0xe0000309 }
471 },
472 /* l.divu $rD,$rA,$rB */
473 {
474 { 0, 0, 0, 0 },
475 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
476 & ifmt_l_and, { 0xe000030a }
477 },
478 /* l.ff1 $rD,$rA */
479 {
480 { 0, 0, 0, 0 },
481 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
482 & ifmt_l_and, { 0xe000000f }
483 },
484 /* l.fl1 $rD,$rA */
485 {
486 { 0, 0, 0, 0 },
487 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
488 & ifmt_l_and, { 0xe000010f }
489 },
490 /* l.andi $rD,$rA,$uimm16 */
491 {
492 { 0, 0, 0, 0 },
493 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
494 & ifmt_l_mfspr, { 0xa4000000 }
495 },
496 /* l.ori $rD,$rA,$uimm16 */
497 {
498 { 0, 0, 0, 0 },
499 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
500 & ifmt_l_mfspr, { 0xa8000000 }
501 },
502 /* l.xori $rD,$rA,$simm16 */
503 {
504 { 0, 0, 0, 0 },
505 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
506 & ifmt_l_lwz, { 0xac000000 }
507 },
508 /* l.addi $rD,$rA,$simm16 */
509 {
510 { 0, 0, 0, 0 },
511 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
512 & ifmt_l_lwz, { 0x9c000000 }
513 },
514 /* l.addic $rD,$rA,$simm16 */
515 {
516 { 0, 0, 0, 0 },
517 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
518 & ifmt_l_lwz, { 0xa0000000 }
519 },
520 /* l.muli $rD,$rA,$simm16 */
521 {
522 { 0, 0, 0, 0 },
523 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
524 & ifmt_l_lwz, { 0xb0000000 }
525 },
526 /* l.exths $rD,$rA */
527 {
528 { 0, 0, 0, 0 },
529 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
530 & ifmt_l_exths, { 0xe000000c }
531 },
532 /* l.extbs $rD,$rA */
533 {
534 { 0, 0, 0, 0 },
535 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
536 & ifmt_l_exths, { 0xe000004c }
537 },
538 /* l.exthz $rD,$rA */
539 {
540 { 0, 0, 0, 0 },
541 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
542 & ifmt_l_exths, { 0xe000008c }
543 },
544 /* l.extbz $rD,$rA */
545 {
546 { 0, 0, 0, 0 },
547 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
548 & ifmt_l_exths, { 0xe00000cc }
549 },
550 /* l.extws $rD,$rA */
551 {
552 { 0, 0, 0, 0 },
553 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
554 & ifmt_l_exths, { 0xe000000d }
555 },
556 /* l.extwz $rD,$rA */
557 {
558 { 0, 0, 0, 0 },
559 { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
560 & ifmt_l_exths, { 0xe000004d }
561 },
562 /* l.cmov $rD,$rA,$rB */
563 {
564 { 0, 0, 0, 0 },
565 { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
566 & ifmt_l_cmov, { 0xe000000e }
567 },
568 /* l.sfgts $rA,$rB */
569 {
570 { 0, 0, 0, 0 },
571 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
572 & ifmt_l_sfgts, { 0xe5400000 }
573 },
574 /* l.sfgtsi $rA,$simm16 */
575 {
576 { 0, 0, 0, 0 },
577 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
578 & ifmt_l_sfgtsi, { 0xbd400000 }
579 },
580 /* l.sfgtu $rA,$rB */
581 {
582 { 0, 0, 0, 0 },
583 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
584 & ifmt_l_sfgts, { 0xe4400000 }
585 },
586 /* l.sfgtui $rA,$simm16 */
587 {
588 { 0, 0, 0, 0 },
589 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
590 & ifmt_l_sfgtsi, { 0xbc400000 }
591 },
592 /* l.sfges $rA,$rB */
593 {
594 { 0, 0, 0, 0 },
595 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
596 & ifmt_l_sfgts, { 0xe5600000 }
597 },
598 /* l.sfgesi $rA,$simm16 */
599 {
600 { 0, 0, 0, 0 },
601 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
602 & ifmt_l_sfgtsi, { 0xbd600000 }
603 },
604 /* l.sfgeu $rA,$rB */
605 {
606 { 0, 0, 0, 0 },
607 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
608 & ifmt_l_sfgts, { 0xe4600000 }
609 },
610 /* l.sfgeui $rA,$simm16 */
611 {
612 { 0, 0, 0, 0 },
613 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
614 & ifmt_l_sfgtsi, { 0xbc600000 }
615 },
616 /* l.sflts $rA,$rB */
617 {
618 { 0, 0, 0, 0 },
619 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
620 & ifmt_l_sfgts, { 0xe5800000 }
621 },
622 /* l.sfltsi $rA,$simm16 */
623 {
624 { 0, 0, 0, 0 },
625 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
626 & ifmt_l_sfgtsi, { 0xbd800000 }
627 },
628 /* l.sfltu $rA,$rB */
629 {
630 { 0, 0, 0, 0 },
631 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
632 & ifmt_l_sfgts, { 0xe4800000 }
633 },
634 /* l.sfltui $rA,$simm16 */
635 {
636 { 0, 0, 0, 0 },
637 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
638 & ifmt_l_sfgtsi, { 0xbc800000 }
639 },
640 /* l.sfles $rA,$rB */
641 {
642 { 0, 0, 0, 0 },
643 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
644 & ifmt_l_sfgts, { 0xe5a00000 }
645 },
646 /* l.sflesi $rA,$simm16 */
647 {
648 { 0, 0, 0, 0 },
649 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
650 & ifmt_l_sfgtsi, { 0xbda00000 }
651 },
652 /* l.sfleu $rA,$rB */
653 {
654 { 0, 0, 0, 0 },
655 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
656 & ifmt_l_sfgts, { 0xe4a00000 }
657 },
658 /* l.sfleui $rA,$simm16 */
659 {
660 { 0, 0, 0, 0 },
661 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
662 & ifmt_l_sfgtsi, { 0xbca00000 }
663 },
664 /* l.sfeq $rA,$rB */
665 {
666 { 0, 0, 0, 0 },
667 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
668 & ifmt_l_sfgts, { 0xe4000000 }
669 },
670 /* l.sfeqi $rA,$simm16 */
671 {
672 { 0, 0, 0, 0 },
673 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
674 & ifmt_l_sfgtsi, { 0xbc000000 }
675 },
676 /* l.sfne $rA,$rB */
677 {
678 { 0, 0, 0, 0 },
679 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
680 & ifmt_l_sfgts, { 0xe4200000 }
681 },
682 /* l.sfnei $rA,$simm16 */
683 {
684 { 0, 0, 0, 0 },
685 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
686 & ifmt_l_sfgtsi, { 0xbc200000 }
687 },
688 /* l.mac $rA,$rB */
689 {
690 { 0, 0, 0, 0 },
691 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
692 & ifmt_l_mac, { 0xc4000001 }
693 },
694 /* l.msb $rA,$rB */
695 {
696 { 0, 0, 0, 0 },
697 { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
698 & ifmt_l_mac, { 0xc4000002 }
699 },
700 /* l.maci $rA,${simm16} */
701 {
702 { 0, 0, 0, 0 },
703 { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
704 & ifmt_l_maci, { 0x4c000000 }
705 },
706 /* l.cust1 */
707 {
708 { 0, 0, 0, 0 },
709 { { MNEM, 0 } },
710 & ifmt_l_rfe, { 0x70000000 }
711 },
712 /* l.cust2 */
713 {
714 { 0, 0, 0, 0 },
715 { { MNEM, 0 } },
716 & ifmt_l_rfe, { 0x74000000 }
717 },
718 /* l.cust3 */
719 {
720 { 0, 0, 0, 0 },
721 { { MNEM, 0 } },
722 & ifmt_l_rfe, { 0x78000000 }
723 },
724 /* l.cust4 */
725 {
726 { 0, 0, 0, 0 },
727 { { MNEM, 0 } },
728 & ifmt_l_rfe, { 0x7c000000 }
729 },
730 /* l.cust5 */
731 {
732 { 0, 0, 0, 0 },
733 { { MNEM, 0 } },
734 & ifmt_l_rfe, { 0xf0000000 }
735 },
736 /* l.cust6 */
737 {
738 { 0, 0, 0, 0 },
739 { { MNEM, 0 } },
740 & ifmt_l_rfe, { 0xf4000000 }
741 },
742 /* l.cust7 */
743 {
744 { 0, 0, 0, 0 },
745 { { MNEM, 0 } },
746 & ifmt_l_rfe, { 0xf8000000 }
747 },
748 /* l.cust8 */
749 {
750 { 0, 0, 0, 0 },
751 { { MNEM, 0 } },
752 & ifmt_l_rfe, { 0xfc000000 }
753 },
754 /* lf.add.s $rDSF,$rASF,$rBSF */
755 {
756 { 0, 0, 0, 0 },
757 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
758 & ifmt_lf_add_s, { 0xc8000000 }
759 },
760 /* lf.add.d $rDDF,$rADF,$rBDF */
761 {
762 { 0, 0, 0, 0 },
763 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
764 & ifmt_lf_add_d, { 0xc8000010 }
765 },
766 /* lf.sub.s $rDSF,$rASF,$rBSF */
767 {
768 { 0, 0, 0, 0 },
769 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
770 & ifmt_lf_add_s, { 0xc8000001 }
771 },
772 /* lf.sub.d $rDDF,$rADF,$rBDF */
773 {
774 { 0, 0, 0, 0 },
775 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
776 & ifmt_lf_add_d, { 0xc8000011 }
777 },
778 /* lf.mul.s $rDSF,$rASF,$rBSF */
779 {
780 { 0, 0, 0, 0 },
781 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
782 & ifmt_lf_add_s, { 0xc8000002 }
783 },
784 /* lf.mul.d $rDDF,$rADF,$rBDF */
785 {
786 { 0, 0, 0, 0 },
787 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
788 & ifmt_lf_add_d, { 0xc8000012 }
789 },
790 /* lf.div.s $rDSF,$rASF,$rBSF */
791 {
792 { 0, 0, 0, 0 },
793 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
794 & ifmt_lf_add_s, { 0xc8000003 }
795 },
796 /* lf.div.d $rDDF,$rADF,$rBDF */
797 {
798 { 0, 0, 0, 0 },
799 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
800 & ifmt_lf_add_d, { 0xc8000013 }
801 },
802 /* lf.rem.s $rDSF,$rASF,$rBSF */
803 {
804 { 0, 0, 0, 0 },
805 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
806 & ifmt_lf_add_s, { 0xc8000006 }
807 },
808 /* lf.rem.d $rDDF,$rADF,$rBDF */
809 {
810 { 0, 0, 0, 0 },
811 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
812 & ifmt_lf_add_d, { 0xc8000016 }
813 },
814 /* lf.itof.s $rDSF,$rA */
815 {
816 { 0, 0, 0, 0 },
817 { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } },
818 & ifmt_lf_itof_s, { 0xc8000004 }
819 },
820 /* lf.itof.d $rDSF,$rA */
821 {
822 { 0, 0, 0, 0 },
823 { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } },
824 & ifmt_lf_itof_s, { 0xc8000014 }
825 },
826 /* lf.ftoi.s $rD,$rASF */
827 {
828 { 0, 0, 0, 0 },
829 { { MNEM, ' ', OP (RD), ',', OP (RASF), 0 } },
830 & ifmt_lf_ftoi_s, { 0xc8000005 }
831 },
832 /* lf.ftoi.d $rD,$rADF */
833 {
834 { 0, 0, 0, 0 },
835 { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } },
836 & ifmt_lf_ftoi_d, { 0xc8000015 }
837 },
838 /* lf.sfeq.s $rASF,$rBSF */
839 {
840 { 0, 0, 0, 0 },
841 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
842 & ifmt_lf_eq_s, { 0xc8000008 }
843 },
844 /* lf.sfeq.d $rASF,$rBSF */
845 {
846 { 0, 0, 0, 0 },
847 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
848 & ifmt_lf_eq_s, { 0xc8000018 }
849 },
850 /* lf.sfne.s $rASF,$rBSF */
851 {
852 { 0, 0, 0, 0 },
853 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
854 & ifmt_lf_eq_s, { 0xc8000009 }
855 },
856 /* lf.sfne.d $rASF,$rBSF */
857 {
858 { 0, 0, 0, 0 },
859 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
860 & ifmt_lf_eq_s, { 0xc8000019 }
861 },
862 /* lf.sfge.s $rASF,$rBSF */
863 {
864 { 0, 0, 0, 0 },
865 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
866 & ifmt_lf_eq_s, { 0xc800000b }
867 },
868 /* lf.sfge.d $rASF,$rBSF */
869 {
870 { 0, 0, 0, 0 },
871 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
872 & ifmt_lf_eq_s, { 0xc800001b }
873 },
874 /* lf.sfgt.s $rASF,$rBSF */
875 {
876 { 0, 0, 0, 0 },
877 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
878 & ifmt_lf_eq_s, { 0xc800000a }
879 },
880 /* lf.sfgt.d $rASF,$rBSF */
881 {
882 { 0, 0, 0, 0 },
883 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
884 & ifmt_lf_eq_s, { 0xc800001a }
885 },
886 /* lf.sflt.s $rASF,$rBSF */
887 {
888 { 0, 0, 0, 0 },
889 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
890 & ifmt_lf_eq_s, { 0xc800000c }
891 },
892 /* lf.sflt.d $rASF,$rBSF */
893 {
894 { 0, 0, 0, 0 },
895 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
896 & ifmt_lf_eq_s, { 0xc800001c }
897 },
898 /* lf.sfle.s $rASF,$rBSF */
899 {
900 { 0, 0, 0, 0 },
901 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
902 & ifmt_lf_eq_s, { 0xc800000d }
903 },
904 /* lf.sfle.d $rASF,$rBSF */
905 {
906 { 0, 0, 0, 0 },
907 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
908 & ifmt_lf_eq_s, { 0xc800001d }
909 },
910 /* lf.madd.s $rDSF,$rASF,$rBSF */
911 {
912 { 0, 0, 0, 0 },
913 { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
914 & ifmt_lf_add_s, { 0xc8000007 }
915 },
916 /* lf.madd.d $rDDF,$rADF,$rBDF */
917 {
918 { 0, 0, 0, 0 },
919 { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
920 & ifmt_lf_add_d, { 0xc8000017 }
921 },
922 /* lf.cust1.s $rASF,$rBSF */
923 {
924 { 0, 0, 0, 0 },
925 { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
926 & ifmt_lf_cust1_s, { 0xc80000d0 }
927 },
928 /* lf.cust1.d */
929 {
930 { 0, 0, 0, 0 },
931 { { MNEM, 0 } },
932 & ifmt_lf_cust1_d, { 0xc80000e0 }
933 },
934 };
935
936 #undef A
937 #undef OPERAND
938 #undef MNEM
939 #undef OP
940
941 /* Formats for ALIAS macro-insns. */
942
943 #define F(f) & or1k_cgen_ifld_table[OR1K_##f]
944 #undef F
945
946 /* Each non-simple macro entry points to an array of expansion possibilities. */
947
948 #define A(a) (1 << CGEN_INSN_##a)
949 #define OPERAND(op) OR1K_OPERAND_##op
950 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
951 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
952
953 /* The macro instruction table. */
954
955 static const CGEN_IBASE or1k_cgen_macro_insn_table[] =
956 {
957 };
958
959 /* The macro instruction opcode table. */
960
961 static const CGEN_OPCODE or1k_cgen_macro_insn_opcode_table[] =
962 {
963 };
964
965 #undef A
966 #undef OPERAND
967 #undef MNEM
968 #undef OP
969
970 #ifndef CGEN_ASM_HASH_P
971 #define CGEN_ASM_HASH_P(insn) 1
972 #endif
973
974 #ifndef CGEN_DIS_HASH_P
975 #define CGEN_DIS_HASH_P(insn) 1
976 #endif
977
978 /* Return non-zero if INSN is to be added to the hash table.
979 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
980
981 static int
982 asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
983 {
984 return CGEN_ASM_HASH_P (insn);
985 }
986
987 static int
988 dis_hash_insn_p (const CGEN_INSN *insn)
989 {
990 /* If building the hash table and the NO-DIS attribute is present,
991 ignore. */
992 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
993 return 0;
994 return CGEN_DIS_HASH_P (insn);
995 }
996
997 #ifndef CGEN_ASM_HASH
998 #define CGEN_ASM_HASH_SIZE 127
999 #ifdef CGEN_MNEMONIC_OPERANDS
1000 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
1001 #else
1002 #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
1003 #endif
1004 #endif
1005
1006 /* It doesn't make much sense to provide a default here,
1007 but while this is under development we do.
1008 BUFFER is a pointer to the bytes of the insn, target order.
1009 VALUE is the first base_insn_bitsize bits as an int in host order. */
1010
1011 #ifndef CGEN_DIS_HASH
1012 #define CGEN_DIS_HASH_SIZE 256
1013 #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
1014 #endif
1015
1016 /* The result is the hash value of the insn.
1017 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
1018
1019 static unsigned int
1020 asm_hash_insn (const char *mnem)
1021 {
1022 return CGEN_ASM_HASH (mnem);
1023 }
1024
1025 /* BUF is a pointer to the bytes of the insn, target order.
1026 VALUE is the first base_insn_bitsize bits as an int in host order. */
1027
1028 static unsigned int
1029 dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
1030 CGEN_INSN_INT value ATTRIBUTE_UNUSED)
1031 {
1032 return CGEN_DIS_HASH (buf, value);
1033 }
1034
1035 /* Set the recorded length of the insn in the CGEN_FIELDS struct. */
1036
1037 static void
1038 set_fields_bitsize (CGEN_FIELDS *fields, int size)
1039 {
1040 CGEN_FIELDS_BITSIZE (fields) = size;
1041 }
1042
1043 /* Function to call before using the operand instance table.
1044 This plugs the opcode entries and macro instructions into the cpu table. */
1045
1046 void
1047 or1k_cgen_init_opcode_table (CGEN_CPU_DESC cd)
1048 {
1049 int i;
1050 int num_macros = (sizeof (or1k_cgen_macro_insn_table) /
1051 sizeof (or1k_cgen_macro_insn_table[0]));
1052 const CGEN_IBASE *ib = & or1k_cgen_macro_insn_table[0];
1053 const CGEN_OPCODE *oc = & or1k_cgen_macro_insn_opcode_table[0];
1054 CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
1055
1056 /* This test has been added to avoid a warning generated
1057 if memset is called with a third argument of value zero. */
1058 if (num_macros >= 1)
1059 memset (insns, 0, num_macros * sizeof (CGEN_INSN));
1060 for (i = 0; i < num_macros; ++i)
1061 {
1062 insns[i].base = &ib[i];
1063 insns[i].opcode = &oc[i];
1064 or1k_cgen_build_insn_regex (& insns[i]);
1065 }
1066 cd->macro_insn_table.init_entries = insns;
1067 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
1068 cd->macro_insn_table.num_init_entries = num_macros;
1069
1070 oc = & or1k_cgen_insn_opcode_table[0];
1071 insns = (CGEN_INSN *) cd->insn_table.init_entries;
1072 for (i = 0; i < MAX_INSNS; ++i)
1073 {
1074 insns[i].opcode = &oc[i];
1075 or1k_cgen_build_insn_regex (& insns[i]);
1076 }
1077
1078 cd->sizeof_fields = sizeof (CGEN_FIELDS);
1079 cd->set_fields_bitsize = set_fields_bitsize;
1080
1081 cd->asm_hash_p = asm_hash_insn_p;
1082 cd->asm_hash = asm_hash_insn;
1083 cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
1084
1085 cd->dis_hash_p = dis_hash_insn_p;
1086 cd->dis_hash = dis_hash_insn;
1087 cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
1088 }
This page took 0.087158 seconds and 4 git commands to generate.