or1k: Add the l.adrp insn and supporting relocations
[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_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 }