Coverage Report

Created: 2025-06-24 06:45

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