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