Copyright update for binutils
[deliverable/binutils-gdb.git] / opcodes / fr30-opc.c
CommitLineData
252b5132
RH
1/* Instruction opcode table for fr30.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
6f2750fe 5Copyright (C) 1996-2016 Free Software Foundation, Inc.
252b5132
RH
6
7This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8
9b201bb5
NC
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.
252b5132 13
9b201bb5
NC
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.
252b5132 18
9b201bb5
NC
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.
252b5132
RH
22
23*/
24
25#include "sysdep.h"
26#include "ansidecl.h"
27#include "bfd.h"
28#include "symcat.h"
29#include "fr30-desc.h"
30#include "fr30-opc.h"
6bb95a0f 31#include "libiberty.h"
252b5132
RH
32
33/* The hash functions are recorded here to help keep assembler code out of
34 the disassembler and vice versa. */
35
47b0e7ad
NC
36static int asm_hash_insn_p (const CGEN_INSN *);
37static unsigned int asm_hash_insn (const char *);
38static int dis_hash_insn_p (const CGEN_INSN *);
39static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
252b5132
RH
40
41/* Instruction formats. */
42
b3466c39 43#define F(f) & fr30_cgen_ifld_table[FR30_##f]
bf143b25 44static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
6bb95a0f 45 0, 0, 0x0, { { 0 } }
252b5132
RH
46};
47
bf143b25 48static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
6bb95a0f 49 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } }
252b5132
RH
50};
51
bf143b25 52static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
6bb95a0f 53 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } }
252b5132
RH
54};
55
bf143b25 56static const CGEN_IFMT ifmt_add2 ATTRIBUTE_UNUSED = {
6bb95a0f 57 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } }
252b5132
RH
58};
59
bf143b25 60static const CGEN_IFMT ifmt_div0s ATTRIBUTE_UNUSED = {
6bb95a0f 61 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
252b5132
RH
62};
63
bf143b25 64static const CGEN_IFMT ifmt_div3 ATTRIBUTE_UNUSED = {
6bb95a0f 65 16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } }
252b5132
RH
66};
67
bf143b25 68static const CGEN_IFMT ifmt_ldi8 ATTRIBUTE_UNUSED = {
6bb95a0f 69 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
252b5132
RH
70};
71
bf143b25 72static const CGEN_IFMT ifmt_ldi20 ATTRIBUTE_UNUSED = {
6bb95a0f 73 16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } }
252b5132
RH
74};
75
bf143b25 76static const CGEN_IFMT ifmt_ldi32 ATTRIBUTE_UNUSED = {
6bb95a0f 77 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
252b5132
RH
78};
79
bf143b25 80static const CGEN_IFMT ifmt_ldr14 ATTRIBUTE_UNUSED = {
6bb95a0f 81 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } }
252b5132
RH
82};
83
bf143b25 84static const CGEN_IFMT ifmt_ldr14uh ATTRIBUTE_UNUSED = {
6bb95a0f 85 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } }
252b5132
RH
86};
87
bf143b25 88static const CGEN_IFMT ifmt_ldr14ub ATTRIBUTE_UNUSED = {
6bb95a0f 89 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } }
252b5132
RH
90};
91
bf143b25 92static const CGEN_IFMT ifmt_ldr15 ATTRIBUTE_UNUSED = {
6bb95a0f 93 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } }
252b5132
RH
94};
95
bf143b25 96static const CGEN_IFMT ifmt_ldr15dr ATTRIBUTE_UNUSED = {
6bb95a0f 97 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } }
252b5132
RH
98};
99
bf143b25 100static const CGEN_IFMT ifmt_movdr ATTRIBUTE_UNUSED = {
6bb95a0f 101 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } }
252b5132
RH
102};
103
bf143b25 104static const CGEN_IFMT ifmt_call ATTRIBUTE_UNUSED = {
6bb95a0f 105 16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } }
252b5132
RH
106};
107
bf143b25 108static const CGEN_IFMT ifmt_int ATTRIBUTE_UNUSED = {
6bb95a0f 109 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } }
252b5132
RH
110};
111
bf143b25 112static const CGEN_IFMT ifmt_brad ATTRIBUTE_UNUSED = {
6bb95a0f 113 16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } }
252b5132
RH
114};
115
bf143b25 116static const CGEN_IFMT ifmt_dmovr13 ATTRIBUTE_UNUSED = {
6bb95a0f 117 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } }
252b5132
RH
118};
119
bf143b25 120static const CGEN_IFMT ifmt_dmovr13h ATTRIBUTE_UNUSED = {
6bb95a0f 121 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } }
252b5132
RH
122};
123
bf143b25 124static const CGEN_IFMT ifmt_dmovr13b ATTRIBUTE_UNUSED = {
6bb95a0f 125 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } }
252b5132
RH
126};
127
bf143b25 128static const CGEN_IFMT ifmt_copop ATTRIBUTE_UNUSED = {
6bb95a0f 129 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
252b5132
RH
130};
131
bf143b25 132static const CGEN_IFMT ifmt_copld ATTRIBUTE_UNUSED = {
6bb95a0f 133 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
252b5132
RH
134};
135
bf143b25 136static const CGEN_IFMT ifmt_copst ATTRIBUTE_UNUSED = {
6bb95a0f 137 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } }
252b5132
RH
138};
139
bf143b25 140static const CGEN_IFMT ifmt_addsp ATTRIBUTE_UNUSED = {
6bb95a0f 141 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } }
252b5132
RH
142};
143
bf143b25 144static const CGEN_IFMT ifmt_ldm0 ATTRIBUTE_UNUSED = {
6bb95a0f 145 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } }
252b5132
RH
146};
147
bf143b25 148static const CGEN_IFMT ifmt_ldm1 ATTRIBUTE_UNUSED = {
6bb95a0f 149 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } }
252b5132
RH
150};
151
bf143b25 152static const CGEN_IFMT ifmt_stm0 ATTRIBUTE_UNUSED = {
6bb95a0f 153 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } }
252b5132
RH
154};
155
bf143b25 156static const CGEN_IFMT ifmt_stm1 ATTRIBUTE_UNUSED = {
6bb95a0f 157 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } }
252b5132
RH
158};
159
bf143b25 160static const CGEN_IFMT ifmt_enter ATTRIBUTE_UNUSED = {
6bb95a0f 161 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } }
252b5132
RH
162};
163
164#undef F
165
b3466c39 166#define A(a) (1 << CGEN_INSN_##a)
b3466c39 167#define OPERAND(op) FR30_OPERAND_##op
252b5132 168#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
252b5132
RH
169#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
170
171/* The instruction table. */
172
173static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] =
174{
175 /* Special null first entry.
176 A `num' value of zero is thus invalid.
177 Also, the special `invalid' insn resides here. */
6bb95a0f 178 { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
252b5132
RH
179/* add $Rj,$Ri */
180 {
181 { 0, 0, 0, 0 },
182 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
183 & ifmt_add, { 0xa600 }
184 },
185/* add $u4,$Ri */
186 {
187 { 0, 0, 0, 0 },
188 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
189 & ifmt_addi, { 0xa400 }
190 },
191/* add2 $m4,$Ri */
192 {
193 { 0, 0, 0, 0 },
194 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
195 & ifmt_add2, { 0xa500 }
196 },
197/* addc $Rj,$Ri */
198 {
199 { 0, 0, 0, 0 },
200 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
201 & ifmt_add, { 0xa700 }
202 },
203/* addn $Rj,$Ri */
204 {
205 { 0, 0, 0, 0 },
206 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
207 & ifmt_add, { 0xa200 }
208 },
209/* addn $u4,$Ri */
210 {
211 { 0, 0, 0, 0 },
212 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
213 & ifmt_addi, { 0xa000 }
214 },
215/* addn2 $m4,$Ri */
216 {
217 { 0, 0, 0, 0 },
218 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
219 & ifmt_add2, { 0xa100 }
220 },
221/* sub $Rj,$Ri */
222 {
223 { 0, 0, 0, 0 },
224 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
225 & ifmt_add, { 0xac00 }
226 },
227/* subc $Rj,$Ri */
228 {
229 { 0, 0, 0, 0 },
230 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
231 & ifmt_add, { 0xad00 }
232 },
233/* subn $Rj,$Ri */
234 {
235 { 0, 0, 0, 0 },
236 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
237 & ifmt_add, { 0xae00 }
238 },
239/* cmp $Rj,$Ri */
240 {
241 { 0, 0, 0, 0 },
242 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
243 & ifmt_add, { 0xaa00 }
244 },
245/* cmp $u4,$Ri */
246 {
247 { 0, 0, 0, 0 },
248 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
249 & ifmt_addi, { 0xa800 }
250 },
251/* cmp2 $m4,$Ri */
252 {
253 { 0, 0, 0, 0 },
254 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
255 & ifmt_add2, { 0xa900 }
256 },
257/* and $Rj,$Ri */
258 {
259 { 0, 0, 0, 0 },
260 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
261 & ifmt_add, { 0x8200 }
262 },
263/* or $Rj,$Ri */
264 {
265 { 0, 0, 0, 0 },
266 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
267 & ifmt_add, { 0x9200 }
268 },
269/* eor $Rj,$Ri */
270 {
271 { 0, 0, 0, 0 },
272 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
273 & ifmt_add, { 0x9a00 }
274 },
275/* and $Rj,@$Ri */
276 {
277 { 0, 0, 0, 0 },
278 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
279 & ifmt_add, { 0x8400 }
280 },
281/* andh $Rj,@$Ri */
282 {
283 { 0, 0, 0, 0 },
284 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
285 & ifmt_add, { 0x8500 }
286 },
287/* andb $Rj,@$Ri */
288 {
289 { 0, 0, 0, 0 },
290 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
291 & ifmt_add, { 0x8600 }
292 },
293/* or $Rj,@$Ri */
294 {
295 { 0, 0, 0, 0 },
296 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
297 & ifmt_add, { 0x9400 }
298 },
299/* orh $Rj,@$Ri */
300 {
301 { 0, 0, 0, 0 },
302 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
303 & ifmt_add, { 0x9500 }
304 },
305/* orb $Rj,@$Ri */
306 {
307 { 0, 0, 0, 0 },
308 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
309 & ifmt_add, { 0x9600 }
310 },
311/* eor $Rj,@$Ri */
312 {
313 { 0, 0, 0, 0 },
314 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
315 & ifmt_add, { 0x9c00 }
316 },
317/* eorh $Rj,@$Ri */
318 {
319 { 0, 0, 0, 0 },
320 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
321 & ifmt_add, { 0x9d00 }
322 },
323/* eorb $Rj,@$Ri */
324 {
325 { 0, 0, 0, 0 },
326 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
327 & ifmt_add, { 0x9e00 }
328 },
329/* bandl $u4,@$Ri */
330 {
331 { 0, 0, 0, 0 },
332 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
333 & ifmt_addi, { 0x8000 }
334 },
335/* borl $u4,@$Ri */
336 {
337 { 0, 0, 0, 0 },
338 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
339 & ifmt_addi, { 0x9000 }
340 },
341/* beorl $u4,@$Ri */
342 {
343 { 0, 0, 0, 0 },
344 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
345 & ifmt_addi, { 0x9800 }
346 },
347/* bandh $u4,@$Ri */
348 {
349 { 0, 0, 0, 0 },
350 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
351 & ifmt_addi, { 0x8100 }
352 },
353/* borh $u4,@$Ri */
354 {
355 { 0, 0, 0, 0 },
356 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
357 & ifmt_addi, { 0x9100 }
358 },
359/* beorh $u4,@$Ri */
360 {
361 { 0, 0, 0, 0 },
362 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
363 & ifmt_addi, { 0x9900 }
364 },
365/* btstl $u4,@$Ri */
366 {
367 { 0, 0, 0, 0 },
368 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
369 & ifmt_addi, { 0x8800 }
370 },
371/* btsth $u4,@$Ri */
372 {
373 { 0, 0, 0, 0 },
374 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
375 & ifmt_addi, { 0x8900 }
376 },
377/* mul $Rj,$Ri */
378 {
379 { 0, 0, 0, 0 },
380 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
381 & ifmt_add, { 0xaf00 }
382 },
383/* mulu $Rj,$Ri */
384 {
385 { 0, 0, 0, 0 },
386 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
387 & ifmt_add, { 0xab00 }
388 },
389/* mulh $Rj,$Ri */
390 {
391 { 0, 0, 0, 0 },
392 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
393 & ifmt_add, { 0xbf00 }
394 },
395/* muluh $Rj,$Ri */
396 {
397 { 0, 0, 0, 0 },
398 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
399 & ifmt_add, { 0xbb00 }
400 },
401/* div0s $Ri */
402 {
403 { 0, 0, 0, 0 },
404 { { MNEM, ' ', OP (RI), 0 } },
405 & ifmt_div0s, { 0x9740 }
406 },
407/* div0u $Ri */
408 {
409 { 0, 0, 0, 0 },
410 { { MNEM, ' ', OP (RI), 0 } },
411 & ifmt_div0s, { 0x9750 }
412 },
413/* div1 $Ri */
414 {
415 { 0, 0, 0, 0 },
416 { { MNEM, ' ', OP (RI), 0 } },
417 & ifmt_div0s, { 0x9760 }
418 },
419/* div2 $Ri */
420 {
421 { 0, 0, 0, 0 },
422 { { MNEM, ' ', OP (RI), 0 } },
423 & ifmt_div0s, { 0x9770 }
424 },
425/* div3 */
426 {
427 { 0, 0, 0, 0 },
428 { { MNEM, 0 } },
429 & ifmt_div3, { 0x9f60 }
430 },
431/* div4s */
432 {
433 { 0, 0, 0, 0 },
434 { { MNEM, 0 } },
435 & ifmt_div3, { 0x9f70 }
436 },
437/* lsl $Rj,$Ri */
438 {
439 { 0, 0, 0, 0 },
440 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
441 & ifmt_add, { 0xb600 }
442 },
443/* lsl $u4,$Ri */
444 {
445 { 0, 0, 0, 0 },
446 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
447 & ifmt_addi, { 0xb400 }
448 },
449/* lsl2 $u4,$Ri */
450 {
451 { 0, 0, 0, 0 },
452 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
453 & ifmt_addi, { 0xb500 }
454 },
455/* lsr $Rj,$Ri */
456 {
457 { 0, 0, 0, 0 },
458 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
459 & ifmt_add, { 0xb200 }
460 },
461/* lsr $u4,$Ri */
462 {
463 { 0, 0, 0, 0 },
464 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
465 & ifmt_addi, { 0xb000 }
466 },
467/* lsr2 $u4,$Ri */
468 {
469 { 0, 0, 0, 0 },
470 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
471 & ifmt_addi, { 0xb100 }
472 },
473/* asr $Rj,$Ri */
474 {
475 { 0, 0, 0, 0 },
476 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
477 & ifmt_add, { 0xba00 }
478 },
479/* asr $u4,$Ri */
480 {
481 { 0, 0, 0, 0 },
482 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
483 & ifmt_addi, { 0xb800 }
484 },
485/* asr2 $u4,$Ri */
486 {
487 { 0, 0, 0, 0 },
488 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
489 & ifmt_addi, { 0xb900 }
490 },
491/* ldi:8 $i8,$Ri */
492 {
493 { 0, 0, 0, 0 },
494 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
495 & ifmt_ldi8, { 0xc000 }
496 },
497/* ldi:20 $i20,$Ri */
498 {
499 { 0, 0, 0, 0 },
500 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
501 & ifmt_ldi20, { 0x9b00 }
502 },
503/* ldi:32 $i32,$Ri */
504 {
505 { 0, 0, 0, 0 },
506 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
507 & ifmt_ldi32, { 0x9f80 }
508 },
509/* ld @$Rj,$Ri */
510 {
511 { 0, 0, 0, 0 },
512 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
513 & ifmt_add, { 0x400 }
514 },
515/* lduh @$Rj,$Ri */
516 {
517 { 0, 0, 0, 0 },
518 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
519 & ifmt_add, { 0x500 }
520 },
521/* ldub @$Rj,$Ri */
522 {
523 { 0, 0, 0, 0 },
524 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
525 & ifmt_add, { 0x600 }
526 },
527/* ld @($R13,$Rj),$Ri */
528 {
529 { 0, 0, 0, 0 },
530 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
531 & ifmt_add, { 0x0 }
532 },
533/* lduh @($R13,$Rj),$Ri */
534 {
535 { 0, 0, 0, 0 },
536 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
537 & ifmt_add, { 0x100 }
538 },
539/* ldub @($R13,$Rj),$Ri */
540 {
541 { 0, 0, 0, 0 },
542 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
543 & ifmt_add, { 0x200 }
544 },
545/* ld @($R14,$disp10),$Ri */
546 {
547 { 0, 0, 0, 0 },
548 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
549 & ifmt_ldr14, { 0x2000 }
550 },
551/* lduh @($R14,$disp9),$Ri */
552 {
553 { 0, 0, 0, 0 },
554 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
555 & ifmt_ldr14uh, { 0x4000 }
556 },
557/* ldub @($R14,$disp8),$Ri */
558 {
559 { 0, 0, 0, 0 },
560 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
561 & ifmt_ldr14ub, { 0x6000 }
562 },
563/* ld @($R15,$udisp6),$Ri */
564 {
565 { 0, 0, 0, 0 },
566 { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
567 & ifmt_ldr15, { 0x300 }
568 },
569/* ld @$R15+,$Ri */
570 {
571 { 0, 0, 0, 0 },
572 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
573 & ifmt_div0s, { 0x700 }
574 },
575/* ld @$R15+,$Rs2 */
576 {
577 { 0, 0, 0, 0 },
578 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
579 & ifmt_ldr15dr, { 0x780 }
580 },
581/* ld @$R15+,$ps */
582 {
583 { 0, 0, 0, 0 },
584 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
585 & ifmt_div3, { 0x790 }
586 },
587/* st $Ri,@$Rj */
588 {
589 { 0, 0, 0, 0 },
590 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
591 & ifmt_add, { 0x1400 }
592 },
593/* sth $Ri,@$Rj */
594 {
595 { 0, 0, 0, 0 },
596 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
597 & ifmt_add, { 0x1500 }
598 },
599/* stb $Ri,@$Rj */
600 {
601 { 0, 0, 0, 0 },
602 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
603 & ifmt_add, { 0x1600 }
604 },
605/* st $Ri,@($R13,$Rj) */
606 {
607 { 0, 0, 0, 0 },
608 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
609 & ifmt_add, { 0x1000 }
610 },
611/* sth $Ri,@($R13,$Rj) */
612 {
613 { 0, 0, 0, 0 },
614 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
615 & ifmt_add, { 0x1100 }
616 },
617/* stb $Ri,@($R13,$Rj) */
618 {
619 { 0, 0, 0, 0 },
620 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
621 & ifmt_add, { 0x1200 }
622 },
623/* st $Ri,@($R14,$disp10) */
624 {
625 { 0, 0, 0, 0 },
626 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
627 & ifmt_ldr14, { 0x3000 }
628 },
629/* sth $Ri,@($R14,$disp9) */
630 {
631 { 0, 0, 0, 0 },
632 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
633 & ifmt_ldr14uh, { 0x5000 }
634 },
635/* stb $Ri,@($R14,$disp8) */
636 {
637 { 0, 0, 0, 0 },
638 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
639 & ifmt_ldr14ub, { 0x7000 }
640 },
641/* st $Ri,@($R15,$udisp6) */
642 {
643 { 0, 0, 0, 0 },
644 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
645 & ifmt_ldr15, { 0x1300 }
646 },
647/* st $Ri,@-$R15 */
648 {
649 { 0, 0, 0, 0 },
650 { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
651 & ifmt_div0s, { 0x1700 }
652 },
653/* st $Rs2,@-$R15 */
654 {
655 { 0, 0, 0, 0 },
656 { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
657 & ifmt_ldr15dr, { 0x1780 }
658 },
659/* st $ps,@-$R15 */
660 {
661 { 0, 0, 0, 0 },
662 { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
663 & ifmt_div3, { 0x1790 }
664 },
665/* mov $Rj,$Ri */
666 {
667 { 0, 0, 0, 0 },
668 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
669 & ifmt_add, { 0x8b00 }
670 },
671/* mov $Rs1,$Ri */
672 {
673 { 0, 0, 0, 0 },
674 { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
675 & ifmt_movdr, { 0xb700 }
676 },
677/* mov $ps,$Ri */
678 {
679 { 0, 0, 0, 0 },
680 { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
681 & ifmt_div0s, { 0x1710 }
682 },
683/* mov $Ri,$Rs1 */
684 {
685 { 0, 0, 0, 0 },
686 { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
687 & ifmt_movdr, { 0xb300 }
688 },
689/* mov $Ri,$ps */
690 {
691 { 0, 0, 0, 0 },
692 { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
693 & ifmt_div0s, { 0x710 }
694 },
695/* jmp @$Ri */
696 {
697 { 0, 0, 0, 0 },
698 { { MNEM, ' ', '@', OP (RI), 0 } },
699 & ifmt_div0s, { 0x9700 }
700 },
701/* jmp:d @$Ri */
702 {
703 { 0, 0, 0, 0 },
704 { { MNEM, ' ', '@', OP (RI), 0 } },
705 & ifmt_div0s, { 0x9f00 }
706 },
707/* call @$Ri */
708 {
709 { 0, 0, 0, 0 },
710 { { MNEM, ' ', '@', OP (RI), 0 } },
711 & ifmt_div0s, { 0x9710 }
712 },
713/* call:d @$Ri */
714 {
715 { 0, 0, 0, 0 },
716 { { MNEM, ' ', '@', OP (RI), 0 } },
717 & ifmt_div0s, { 0x9f10 }
718 },
719/* call $label12 */
720 {
721 { 0, 0, 0, 0 },
722 { { MNEM, ' ', OP (LABEL12), 0 } },
723 & ifmt_call, { 0xd000 }
724 },
725/* call:d $label12 */
726 {
727 { 0, 0, 0, 0 },
728 { { MNEM, ' ', OP (LABEL12), 0 } },
729 & ifmt_call, { 0xd800 }
730 },
731/* ret */
732 {
733 { 0, 0, 0, 0 },
734 { { MNEM, 0 } },
735 & ifmt_div3, { 0x9720 }
736 },
737/* ret:d */
738 {
739 { 0, 0, 0, 0 },
740 { { MNEM, 0 } },
741 & ifmt_div3, { 0x9f20 }
742 },
743/* int $u8 */
744 {
745 { 0, 0, 0, 0 },
746 { { MNEM, ' ', OP (U8), 0 } },
747 & ifmt_int, { 0x1f00 }
748 },
749/* inte */
750 {
751 { 0, 0, 0, 0 },
752 { { MNEM, 0 } },
753 & ifmt_div3, { 0x9f30 }
754 },
755/* reti */
756 {
757 { 0, 0, 0, 0 },
758 { { MNEM, 0 } },
759 & ifmt_div3, { 0x9730 }
760 },
761/* bra:d $label9 */
762 {
763 { 0, 0, 0, 0 },
764 { { MNEM, ' ', OP (LABEL9), 0 } },
765 & ifmt_brad, { 0xf000 }
766 },
767/* bra $label9 */
768 {
769 { 0, 0, 0, 0 },
770 { { MNEM, ' ', OP (LABEL9), 0 } },
771 & ifmt_brad, { 0xe000 }
772 },
773/* bno:d $label9 */
774 {
775 { 0, 0, 0, 0 },
776 { { MNEM, ' ', OP (LABEL9), 0 } },
777 & ifmt_brad, { 0xf100 }
778 },
779/* bno $label9 */
780 {
781 { 0, 0, 0, 0 },
782 { { MNEM, ' ', OP (LABEL9), 0 } },
783 & ifmt_brad, { 0xe100 }
784 },
785/* beq:d $label9 */
786 {
787 { 0, 0, 0, 0 },
788 { { MNEM, ' ', OP (LABEL9), 0 } },
789 & ifmt_brad, { 0xf200 }
790 },
791/* beq $label9 */
792 {
793 { 0, 0, 0, 0 },
794 { { MNEM, ' ', OP (LABEL9), 0 } },
795 & ifmt_brad, { 0xe200 }
796 },
797/* bne:d $label9 */
798 {
799 { 0, 0, 0, 0 },
800 { { MNEM, ' ', OP (LABEL9), 0 } },
801 & ifmt_brad, { 0xf300 }
802 },
803/* bne $label9 */
804 {
805 { 0, 0, 0, 0 },
806 { { MNEM, ' ', OP (LABEL9), 0 } },
807 & ifmt_brad, { 0xe300 }
808 },
809/* bc:d $label9 */
810 {
811 { 0, 0, 0, 0 },
812 { { MNEM, ' ', OP (LABEL9), 0 } },
813 & ifmt_brad, { 0xf400 }
814 },
815/* bc $label9 */
816 {
817 { 0, 0, 0, 0 },
818 { { MNEM, ' ', OP (LABEL9), 0 } },
819 & ifmt_brad, { 0xe400 }
820 },
821/* bnc:d $label9 */
822 {
823 { 0, 0, 0, 0 },
824 { { MNEM, ' ', OP (LABEL9), 0 } },
825 & ifmt_brad, { 0xf500 }
826 },
827/* bnc $label9 */
828 {
829 { 0, 0, 0, 0 },
830 { { MNEM, ' ', OP (LABEL9), 0 } },
831 & ifmt_brad, { 0xe500 }
832 },
833/* bn:d $label9 */
834 {
835 { 0, 0, 0, 0 },
836 { { MNEM, ' ', OP (LABEL9), 0 } },
837 & ifmt_brad, { 0xf600 }
838 },
839/* bn $label9 */
840 {
841 { 0, 0, 0, 0 },
842 { { MNEM, ' ', OP (LABEL9), 0 } },
843 & ifmt_brad, { 0xe600 }
844 },
845/* bp:d $label9 */
846 {
847 { 0, 0, 0, 0 },
848 { { MNEM, ' ', OP (LABEL9), 0 } },
849 & ifmt_brad, { 0xf700 }
850 },
851/* bp $label9 */
852 {
853 { 0, 0, 0, 0 },
854 { { MNEM, ' ', OP (LABEL9), 0 } },
855 & ifmt_brad, { 0xe700 }
856 },
857/* bv:d $label9 */
858 {
859 { 0, 0, 0, 0 },
860 { { MNEM, ' ', OP (LABEL9), 0 } },
861 & ifmt_brad, { 0xf800 }
862 },
863/* bv $label9 */
864 {
865 { 0, 0, 0, 0 },
866 { { MNEM, ' ', OP (LABEL9), 0 } },
867 & ifmt_brad, { 0xe800 }
868 },
869/* bnv:d $label9 */
870 {
871 { 0, 0, 0, 0 },
872 { { MNEM, ' ', OP (LABEL9), 0 } },
873 & ifmt_brad, { 0xf900 }
874 },
875/* bnv $label9 */
876 {
877 { 0, 0, 0, 0 },
878 { { MNEM, ' ', OP (LABEL9), 0 } },
879 & ifmt_brad, { 0xe900 }
880 },
881/* blt:d $label9 */
882 {
883 { 0, 0, 0, 0 },
884 { { MNEM, ' ', OP (LABEL9), 0 } },
885 & ifmt_brad, { 0xfa00 }
886 },
887/* blt $label9 */
888 {
889 { 0, 0, 0, 0 },
890 { { MNEM, ' ', OP (LABEL9), 0 } },
891 & ifmt_brad, { 0xea00 }
892 },
893/* bge:d $label9 */
894 {
895 { 0, 0, 0, 0 },
896 { { MNEM, ' ', OP (LABEL9), 0 } },
897 & ifmt_brad, { 0xfb00 }
898 },
899/* bge $label9 */
900 {
901 { 0, 0, 0, 0 },
902 { { MNEM, ' ', OP (LABEL9), 0 } },
903 & ifmt_brad, { 0xeb00 }
904 },
905/* ble:d $label9 */
906 {
907 { 0, 0, 0, 0 },
908 { { MNEM, ' ', OP (LABEL9), 0 } },
909 & ifmt_brad, { 0xfc00 }
910 },
911/* ble $label9 */
912 {
913 { 0, 0, 0, 0 },
914 { { MNEM, ' ', OP (LABEL9), 0 } },
915 & ifmt_brad, { 0xec00 }
916 },
917/* bgt:d $label9 */
918 {
919 { 0, 0, 0, 0 },
920 { { MNEM, ' ', OP (LABEL9), 0 } },
921 & ifmt_brad, { 0xfd00 }
922 },
923/* bgt $label9 */
924 {
925 { 0, 0, 0, 0 },
926 { { MNEM, ' ', OP (LABEL9), 0 } },
927 & ifmt_brad, { 0xed00 }
928 },
929/* bls:d $label9 */
930 {
931 { 0, 0, 0, 0 },
932 { { MNEM, ' ', OP (LABEL9), 0 } },
933 & ifmt_brad, { 0xfe00 }
934 },
935/* bls $label9 */
936 {
937 { 0, 0, 0, 0 },
938 { { MNEM, ' ', OP (LABEL9), 0 } },
939 & ifmt_brad, { 0xee00 }
940 },
941/* bhi:d $label9 */
942 {
943 { 0, 0, 0, 0 },
944 { { MNEM, ' ', OP (LABEL9), 0 } },
945 & ifmt_brad, { 0xff00 }
946 },
947/* bhi $label9 */
948 {
949 { 0, 0, 0, 0 },
950 { { MNEM, ' ', OP (LABEL9), 0 } },
951 & ifmt_brad, { 0xef00 }
952 },
953/* dmov $R13,@$dir10 */
954 {
955 { 0, 0, 0, 0 },
956 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
957 & ifmt_dmovr13, { 0x1800 }
958 },
959/* dmovh $R13,@$dir9 */
960 {
961 { 0, 0, 0, 0 },
962 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
963 & ifmt_dmovr13h, { 0x1900 }
964 },
965/* dmovb $R13,@$dir8 */
966 {
967 { 0, 0, 0, 0 },
968 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
969 & ifmt_dmovr13b, { 0x1a00 }
970 },
971/* dmov @$R13+,@$dir10 */
972 {
973 { 0, 0, 0, 0 },
974 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
975 & ifmt_dmovr13, { 0x1c00 }
976 },
977/* dmovh @$R13+,@$dir9 */
978 {
979 { 0, 0, 0, 0 },
980 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
981 & ifmt_dmovr13h, { 0x1d00 }
982 },
983/* dmovb @$R13+,@$dir8 */
984 {
985 { 0, 0, 0, 0 },
986 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
987 & ifmt_dmovr13b, { 0x1e00 }
988 },
989/* dmov @$R15+,@$dir10 */
990 {
991 { 0, 0, 0, 0 },
992 { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
993 & ifmt_dmovr13, { 0x1b00 }
994 },
995/* dmov @$dir10,$R13 */
996 {
997 { 0, 0, 0, 0 },
998 { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
999 & ifmt_dmovr13, { 0x800 }
1000 },
1001/* dmovh @$dir9,$R13 */
1002 {
1003 { 0, 0, 0, 0 },
1004 { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
1005 & ifmt_dmovr13h, { 0x900 }
1006 },
1007/* dmovb @$dir8,$R13 */
1008 {
1009 { 0, 0, 0, 0 },
1010 { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
1011 & ifmt_dmovr13b, { 0xa00 }
1012 },
1013/* dmov @$dir10,@$R13+ */
1014 {
1015 { 0, 0, 0, 0 },
1016 { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
1017 & ifmt_dmovr13, { 0xc00 }
1018 },
1019/* dmovh @$dir9,@$R13+ */
1020 {
1021 { 0, 0, 0, 0 },
1022 { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
1023 & ifmt_dmovr13h, { 0xd00 }
1024 },
1025/* dmovb @$dir8,@$R13+ */
1026 {
1027 { 0, 0, 0, 0 },
1028 { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
1029 & ifmt_dmovr13b, { 0xe00 }
1030 },
1031/* dmov @$dir10,@-$R15 */
1032 {
1033 { 0, 0, 0, 0 },
1034 { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
1035 & ifmt_dmovr13, { 0xb00 }
1036 },
1037/* ldres @$Ri+,$u4 */
1038 {
1039 { 0, 0, 0, 0 },
1040 { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
1041 & ifmt_addi, { 0xbc00 }
1042 },
1043/* stres $u4,@$Ri+ */
1044 {
1045 { 0, 0, 0, 0 },
1046 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
1047 & ifmt_addi, { 0xbd00 }
1048 },
1049/* copop $u4c,$ccc,$CRj,$CRi */
1050 {
1051 { 0, 0, 0, 0 },
1052 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
1053 & ifmt_copop, { 0x9fc0 }
1054 },
1055/* copld $u4c,$ccc,$Rjc,$CRi */
1056 {
1057 { 0, 0, 0, 0 },
1058 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
1059 & ifmt_copld, { 0x9fd0 }
1060 },
1061/* copst $u4c,$ccc,$CRj,$Ric */
1062 {
1063 { 0, 0, 0, 0 },
1064 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
1065 & ifmt_copst, { 0x9fe0 }
1066 },
1067/* copsv $u4c,$ccc,$CRj,$Ric */
1068 {
1069 { 0, 0, 0, 0 },
1070 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
1071 & ifmt_copst, { 0x9ff0 }
1072 },
1073/* nop */
1074 {
1075 { 0, 0, 0, 0 },
1076 { { MNEM, 0 } },
1077 & ifmt_div3, { 0x9fa0 }
1078 },
1079/* andccr $u8 */
1080 {
1081 { 0, 0, 0, 0 },
1082 { { MNEM, ' ', OP (U8), 0 } },
1083 & ifmt_int, { 0x8300 }
1084 },
1085/* orccr $u8 */
1086 {
1087 { 0, 0, 0, 0 },
1088 { { MNEM, ' ', OP (U8), 0 } },
1089 & ifmt_int, { 0x9300 }
1090 },
1091/* stilm $u8 */
1092 {
1093 { 0, 0, 0, 0 },
1094 { { MNEM, ' ', OP (U8), 0 } },
1095 & ifmt_int, { 0x8700 }
1096 },
1097/* addsp $s10 */
1098 {
1099 { 0, 0, 0, 0 },
1100 { { MNEM, ' ', OP (S10), 0 } },
1101 & ifmt_addsp, { 0xa300 }
1102 },
1103/* extsb $Ri */
1104 {
1105 { 0, 0, 0, 0 },
1106 { { MNEM, ' ', OP (RI), 0 } },
1107 & ifmt_div0s, { 0x9780 }
1108 },
1109/* extub $Ri */
1110 {
1111 { 0, 0, 0, 0 },
1112 { { MNEM, ' ', OP (RI), 0 } },
1113 & ifmt_div0s, { 0x9790 }
1114 },
1115/* extsh $Ri */
1116 {
1117 { 0, 0, 0, 0 },
1118 { { MNEM, ' ', OP (RI), 0 } },
1119 & ifmt_div0s, { 0x97a0 }
1120 },
1121/* extuh $Ri */
1122 {
1123 { 0, 0, 0, 0 },
1124 { { MNEM, ' ', OP (RI), 0 } },
1125 & ifmt_div0s, { 0x97b0 }
1126 },
1127/* ldm0 ($reglist_low_ld) */
1128 {
1129 { 0, 0, 0, 0 },
1130 { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
1131 & ifmt_ldm0, { 0x8c00 }
1132 },
1133/* ldm1 ($reglist_hi_ld) */
1134 {
1135 { 0, 0, 0, 0 },
1136 { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
1137 & ifmt_ldm1, { 0x8d00 }
1138 },
1139/* stm0 ($reglist_low_st) */
1140 {
1141 { 0, 0, 0, 0 },
1142 { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
1143 & ifmt_stm0, { 0x8e00 }
1144 },
1145/* stm1 ($reglist_hi_st) */
1146 {
1147 { 0, 0, 0, 0 },
1148 { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
1149 & ifmt_stm1, { 0x8f00 }
1150 },
1151/* enter $u10 */
1152 {
1153 { 0, 0, 0, 0 },
1154 { { MNEM, ' ', OP (U10), 0 } },
1155 & ifmt_enter, { 0xf00 }
1156 },
1157/* leave */
1158 {
1159 { 0, 0, 0, 0 },
1160 { { MNEM, 0 } },
1161 & ifmt_div3, { 0x9f90 }
1162 },
1163/* xchb @$Rj,$Ri */
1164 {
1165 { 0, 0, 0, 0 },
1166 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1167 & ifmt_add, { 0x8a00 }
1168 },
1169};
1170
1171#undef A
252b5132 1172#undef OPERAND
b3466c39 1173#undef MNEM
252b5132
RH
1174#undef OP
1175
1176/* Formats for ALIAS macro-insns. */
1177
b3466c39 1178#define F(f) & fr30_cgen_ifld_table[FR30_##f]
bf143b25 1179static const CGEN_IFMT ifmt_ldi8m ATTRIBUTE_UNUSED = {
6bb95a0f 1180 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
252b5132
RH
1181};
1182
bf143b25 1183static const CGEN_IFMT ifmt_ldi20m ATTRIBUTE_UNUSED = {
6bb95a0f 1184 16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } }
252b5132
RH
1185};
1186
bf143b25 1187static const CGEN_IFMT ifmt_ldi32m ATTRIBUTE_UNUSED = {
6bb95a0f 1188 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } }
252b5132
RH
1189};
1190
1191#undef F
1192
1193/* Each non-simple macro entry points to an array of expansion possibilities. */
1194
b3466c39 1195#define A(a) (1 << CGEN_INSN_##a)
b3466c39 1196#define OPERAND(op) FR30_OPERAND_##op
252b5132 1197#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
252b5132
RH
1198#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1199
1200/* The macro instruction table. */
1201
1202static const CGEN_IBASE fr30_cgen_macro_insn_table[] =
1203{
1204/* ldi8 $i8,$Ri */
1205 {
1206 -1, "ldi8m", "ldi8", 16,
fb53f5a8 1207 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
252b5132
RH
1208 },
1209/* ldi20 $i20,$Ri */
1210 {
1211 -1, "ldi20m", "ldi20", 32,
fb53f5a8 1212 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
252b5132
RH
1213 },
1214/* ldi32 $i32,$Ri */
1215 {
1216 -1, "ldi32m", "ldi32", 48,
fb53f5a8 1217 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
252b5132
RH
1218 },
1219};
1220
1221/* The macro instruction opcode table. */
1222
1223static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] =
1224{
1225/* ldi8 $i8,$Ri */
1226 {
1227 { 0, 0, 0, 0 },
1228 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
1229 & ifmt_ldi8m, { 0xc000 }
1230 },
1231/* ldi20 $i20,$Ri */
1232 {
1233 { 0, 0, 0, 0 },
1234 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
1235 & ifmt_ldi20m, { 0x9b00 }
1236 },
1237/* ldi32 $i32,$Ri */
1238 {
1239 { 0, 0, 0, 0 },
1240 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
1241 & ifmt_ldi32m, { 0x9f80 }
1242 },
1243};
1244
1245#undef A
252b5132 1246#undef OPERAND
b3466c39 1247#undef MNEM
252b5132
RH
1248#undef OP
1249
1250#ifndef CGEN_ASM_HASH_P
1251#define CGEN_ASM_HASH_P(insn) 1
1252#endif
1253
1254#ifndef CGEN_DIS_HASH_P
1255#define CGEN_DIS_HASH_P(insn) 1
1256#endif
1257
1258/* Return non-zero if INSN is to be added to the hash table.
1259 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
1260
1261static int
1262asm_hash_insn_p (insn)
fc05c67f 1263 const CGEN_INSN *insn ATTRIBUTE_UNUSED;
252b5132
RH
1264{
1265 return CGEN_ASM_HASH_P (insn);
1266}
1267
1268static int
1269dis_hash_insn_p (insn)
1270 const CGEN_INSN *insn;
1271{
1272 /* If building the hash table and the NO-DIS attribute is present,
1273 ignore. */
1274 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
1275 return 0;
1276 return CGEN_DIS_HASH_P (insn);
1277}
1278
1279#ifndef CGEN_ASM_HASH
1280#define CGEN_ASM_HASH_SIZE 127
1281#ifdef CGEN_MNEMONIC_OPERANDS
1282#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
1283#else
1284#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
1285#endif
1286#endif
1287
1288/* It doesn't make much sense to provide a default here,
1289 but while this is under development we do.
1290 BUFFER is a pointer to the bytes of the insn, target order.
1291 VALUE is the first base_insn_bitsize bits as an int in host order. */
1292
1293#ifndef CGEN_DIS_HASH
1294#define CGEN_DIS_HASH_SIZE 256
1295#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
1296#endif
1297
1298/* The result is the hash value of the insn.
1299 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
1300
1301static unsigned int
1302asm_hash_insn (mnem)
1303 const char * mnem;
1304{
1305 return CGEN_ASM_HASH (mnem);
1306}
1307
1308/* BUF is a pointer to the bytes of the insn, target order.
1309 VALUE is the first base_insn_bitsize bits as an int in host order. */
1310
1311static unsigned int
1312dis_hash_insn (buf, value)
0e2ee3ca 1313 const char * buf ATTRIBUTE_UNUSED;
fc05c67f 1314 CGEN_INSN_INT value ATTRIBUTE_UNUSED;
252b5132
RH
1315{
1316 return CGEN_DIS_HASH (buf, value);
1317}
1318
1319/* Set the recorded length of the insn in the CGEN_FIELDS struct. */
1320
1321static void
47b0e7ad 1322set_fields_bitsize (CGEN_FIELDS *fields, int size)
252b5132
RH
1323{
1324 CGEN_FIELDS_BITSIZE (fields) = size;
1325}
1326
1327/* Function to call before using the operand instance table.
1328 This plugs the opcode entries and macro instructions into the cpu table. */
1329
1330void
47b0e7ad 1331fr30_cgen_init_opcode_table (CGEN_CPU_DESC cd)
252b5132
RH
1332{
1333 int i;
1334 int num_macros = (sizeof (fr30_cgen_macro_insn_table) /
1335 sizeof (fr30_cgen_macro_insn_table[0]));
1336 const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0];
1337 const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0];
47b0e7ad
NC
1338 CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
1339
137f2437
NC
1340 /* This test has been added to avoid a warning generated
1341 if memset is called with a third argument of value zero. */
1342 if (num_macros >= 1)
1343 memset (insns, 0, num_macros * sizeof (CGEN_INSN));
252b5132
RH
1344 for (i = 0; i < num_macros; ++i)
1345 {
1346 insns[i].base = &ib[i];
1347 insns[i].opcode = &oc[i];
fc7bc883 1348 fr30_cgen_build_insn_regex (& insns[i]);
252b5132
RH
1349 }
1350 cd->macro_insn_table.init_entries = insns;
1351 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
1352 cd->macro_insn_table.num_init_entries = num_macros;
1353
1354 oc = & fr30_cgen_insn_opcode_table[0];
1355 insns = (CGEN_INSN *) cd->insn_table.init_entries;
1356 for (i = 0; i < MAX_INSNS; ++i)
fc7bc883
RH
1357 {
1358 insns[i].opcode = &oc[i];
1359 fr30_cgen_build_insn_regex (& insns[i]);
1360 }
252b5132
RH
1361
1362 cd->sizeof_fields = sizeof (CGEN_FIELDS);
1363 cd->set_fields_bitsize = set_fields_bitsize;
1364
1365 cd->asm_hash_p = asm_hash_insn_p;
1366 cd->asm_hash = asm_hash_insn;
1367 cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
1368
1369 cd->dis_hash_p = dis_hash_insn_p;
1370 cd->dis_hash = dis_hash_insn;
1371 cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
1372}
This page took 0.732531 seconds and 4 git commands to generate.