Coverage Report

Created: 2025-06-24 06:45

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