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