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