Coverage Report

Created: 2024-08-21 06:24

/src/capstonenext/arch/Mips/MipsMapping.c
Line
Count
Source (jump to first uncovered line)
1
/* Capstone Disassembly Engine */
2
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
3
4
#ifdef CAPSTONE_HAS_MIPS
5
6
#include <stdio.h>  // debug
7
#include <string.h>
8
9
#include "../../Mapping.h"
10
#include "../../utils.h"
11
12
#include "MipsMapping.h"
13
14
#define GET_INSTRINFO_ENUM
15
#include "MipsGenInstrInfo.inc"
16
17
#ifndef CAPSTONE_DIET
18
static const name_map reg_name_maps[] = {
19
  { MIPS_REG_INVALID, NULL },
20
21
  { MIPS_REG_PC, "pc"},
22
23
  //{ MIPS_REG_0, "0"},
24
  { MIPS_REG_0, "zero"},
25
  { MIPS_REG_1, "at"},
26
  //{ MIPS_REG_1, "1"},
27
  { MIPS_REG_2, "v0"},
28
  //{ MIPS_REG_2, "2"},
29
  { MIPS_REG_3, "v1"},
30
  //{ MIPS_REG_3, "3"},
31
  { MIPS_REG_4, "a0"},
32
  //{ MIPS_REG_4, "4"},
33
  { MIPS_REG_5, "a1"},
34
  //{ MIPS_REG_5, "5"},
35
  { MIPS_REG_6, "a2"},
36
  //{ MIPS_REG_6, "6"},
37
  { MIPS_REG_7, "a3"},
38
  //{ MIPS_REG_7, "7"},
39
  { MIPS_REG_8, "t0"},
40
  //{ MIPS_REG_8, "8"},
41
  { MIPS_REG_9, "t1"},
42
  //{ MIPS_REG_9, "9"},
43
  { MIPS_REG_10, "t2"},
44
  //{ MIPS_REG_10, "10"},
45
  { MIPS_REG_11, "t3"},
46
  //{ MIPS_REG_11, "11"},
47
  { MIPS_REG_12, "t4"},
48
  //{ MIPS_REG_12, "12"},
49
  { MIPS_REG_13, "t5"},
50
  //{ MIPS_REG_13, "13"},
51
  { MIPS_REG_14, "t6"},
52
  //{ MIPS_REG_14, "14"},
53
  { MIPS_REG_15, "t7"},
54
  //{ MIPS_REG_15, "15"},
55
  { MIPS_REG_16, "s0"},
56
  //{ MIPS_REG_16, "16"},
57
  { MIPS_REG_17, "s1"},
58
  //{ MIPS_REG_17, "17"},
59
  { MIPS_REG_18, "s2"},
60
  //{ MIPS_REG_18, "18"},
61
  { MIPS_REG_19, "s3"},
62
  //{ MIPS_REG_19, "19"},
63
  { MIPS_REG_20, "s4"},
64
  //{ MIPS_REG_20, "20"},
65
  { MIPS_REG_21, "s5"},
66
  //{ MIPS_REG_21, "21"},
67
  { MIPS_REG_22, "s6"},
68
  //{ MIPS_REG_22, "22"},
69
  { MIPS_REG_23, "s7"},
70
  //{ MIPS_REG_23, "23"},
71
  { MIPS_REG_24, "t8"},
72
  //{ MIPS_REG_24, "24"},
73
  { MIPS_REG_25, "t9"},
74
  //{ MIPS_REG_25, "25"},
75
  { MIPS_REG_26, "k0"},
76
  //{ MIPS_REG_26, "26"},
77
  { MIPS_REG_27, "k1"},
78
  //{ MIPS_REG_27, "27"},
79
  { MIPS_REG_28, "gp"},
80
  //{ MIPS_REG_28, "28"},
81
  { MIPS_REG_29, "sp"},
82
  //{ MIPS_REG_29, "29"},
83
  { MIPS_REG_30, "fp"},
84
  //{ MIPS_REG_30, "30"},
85
  { MIPS_REG_31, "ra"},
86
  //{ MIPS_REG_31, "31"},
87
88
  { MIPS_REG_DSPCCOND, "dspccond"},
89
  { MIPS_REG_DSPCARRY, "dspcarry"},
90
  { MIPS_REG_DSPEFI, "dspefi"},
91
  { MIPS_REG_DSPOUTFLAG, "dspoutflag"},
92
  { MIPS_REG_DSPOUTFLAG16_19, "dspoutflag16_19"},
93
  { MIPS_REG_DSPOUTFLAG20, "dspoutflag20"},
94
  { MIPS_REG_DSPOUTFLAG21, "dspoutflag21"},
95
  { MIPS_REG_DSPOUTFLAG22, "dspoutflag22"},
96
  { MIPS_REG_DSPOUTFLAG23, "dspoutflag23"},
97
  { MIPS_REG_DSPPOS, "dsppos"},
98
  { MIPS_REG_DSPSCOUNT, "dspscount"},
99
100
  { MIPS_REG_AC0, "ac0"},
101
  { MIPS_REG_AC1, "ac1"},
102
  { MIPS_REG_AC2, "ac2"},
103
  { MIPS_REG_AC3, "ac3"},
104
105
  { MIPS_REG_CC0, "cc0"},
106
  { MIPS_REG_CC1, "cc1"},
107
  { MIPS_REG_CC2, "cc2"},
108
  { MIPS_REG_CC3, "cc3"},
109
  { MIPS_REG_CC4, "cc4"},
110
  { MIPS_REG_CC5, "cc5"},
111
  { MIPS_REG_CC6, "cc6"},
112
  { MIPS_REG_CC7, "cc7"},
113
114
  { MIPS_REG_F0, "f0"},
115
  { MIPS_REG_F1, "f1"},
116
  { MIPS_REG_F2, "f2"},
117
  { MIPS_REG_F3, "f3"},
118
  { MIPS_REG_F4, "f4"},
119
  { MIPS_REG_F5, "f5"},
120
  { MIPS_REG_F6, "f6"},
121
  { MIPS_REG_F7, "f7"},
122
  { MIPS_REG_F8, "f8"},
123
  { MIPS_REG_F9, "f9"},
124
  { MIPS_REG_F10, "f10"},
125
  { MIPS_REG_F11, "f11"},
126
  { MIPS_REG_F12, "f12"},
127
  { MIPS_REG_F13, "f13"},
128
  { MIPS_REG_F14, "f14"},
129
  { MIPS_REG_F15, "f15"},
130
  { MIPS_REG_F16, "f16"},
131
  { MIPS_REG_F17, "f17"},
132
  { MIPS_REG_F18, "f18"},
133
  { MIPS_REG_F19, "f19"},
134
  { MIPS_REG_F20, "f20"},
135
  { MIPS_REG_F21, "f21"},
136
  { MIPS_REG_F22, "f22"},
137
  { MIPS_REG_F23, "f23"},
138
  { MIPS_REG_F24, "f24"},
139
  { MIPS_REG_F25, "f25"},
140
  { MIPS_REG_F26, "f26"},
141
  { MIPS_REG_F27, "f27"},
142
  { MIPS_REG_F28, "f28"},
143
  { MIPS_REG_F29, "f29"},
144
  { MIPS_REG_F30, "f30"},
145
  { MIPS_REG_F31, "f31"},
146
147
  { MIPS_REG_FCC0, "fcc0"},
148
  { MIPS_REG_FCC1, "fcc1"},
149
  { MIPS_REG_FCC2, "fcc2"},
150
  { MIPS_REG_FCC3, "fcc3"},
151
  { MIPS_REG_FCC4, "fcc4"},
152
  { MIPS_REG_FCC5, "fcc5"},
153
  { MIPS_REG_FCC6, "fcc6"},
154
  { MIPS_REG_FCC7, "fcc7"},
155
156
  { MIPS_REG_W0, "w0"},
157
  { MIPS_REG_W1, "w1"},
158
  { MIPS_REG_W2, "w2"},
159
  { MIPS_REG_W3, "w3"},
160
  { MIPS_REG_W4, "w4"},
161
  { MIPS_REG_W5, "w5"},
162
  { MIPS_REG_W6, "w6"},
163
  { MIPS_REG_W7, "w7"},
164
  { MIPS_REG_W8, "w8"},
165
  { MIPS_REG_W9, "w9"},
166
  { MIPS_REG_W10, "w10"},
167
  { MIPS_REG_W11, "w11"},
168
  { MIPS_REG_W12, "w12"},
169
  { MIPS_REG_W13, "w13"},
170
  { MIPS_REG_W14, "w14"},
171
  { MIPS_REG_W15, "w15"},
172
  { MIPS_REG_W16, "w16"},
173
  { MIPS_REG_W17, "w17"},
174
  { MIPS_REG_W18, "w18"},
175
  { MIPS_REG_W19, "w19"},
176
  { MIPS_REG_W20, "w20"},
177
  { MIPS_REG_W21, "w21"},
178
  { MIPS_REG_W22, "w22"},
179
  { MIPS_REG_W23, "w23"},
180
  { MIPS_REG_W24, "w24"},
181
  { MIPS_REG_W25, "w25"},
182
  { MIPS_REG_W26, "w26"},
183
  { MIPS_REG_W27, "w27"},
184
  { MIPS_REG_W28, "w28"},
185
  { MIPS_REG_W29, "w29"},
186
  { MIPS_REG_W30, "w30"},
187
  { MIPS_REG_W31, "w31"},
188
189
  { MIPS_REG_HI, "hi"},
190
  { MIPS_REG_LO, "lo"},
191
192
  { MIPS_REG_P0, "p0"},
193
  { MIPS_REG_P1, "p1"},
194
  { MIPS_REG_P2, "p2"},
195
196
  { MIPS_REG_MPL0, "mpl0"},
197
  { MIPS_REG_MPL1, "mpl1"},
198
  { MIPS_REG_MPL2, "mpl2"},
199
};
200
#endif
201
202
const char *Mips_reg_name(csh handle, unsigned int reg)
203
39.7k
{
204
39.7k
#ifndef CAPSTONE_DIET
205
39.7k
  if (reg >= ARR_SIZE(reg_name_maps))
206
0
    return NULL;
207
208
39.7k
  return reg_name_maps[reg].name;
209
#else
210
  return NULL;
211
#endif
212
39.7k
}
213
214
static const insn_map insns[] = {
215
  // dummy item
216
  {
217
    0, 0,
218
#ifndef CAPSTONE_DIET
219
    { 0 }, { 0 }, { 0 }, 0, 0
220
#endif
221
  },
222
223
#include "MipsMappingInsn.inc"
224
};
225
226
// given internal insn id, return public instruction info
227
void Mips_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id)
228
149k
{
229
149k
  unsigned int i;
230
231
149k
  i = insn_find(insns, ARR_SIZE(insns), id, &h->insn_cache);
232
149k
  if (i != 0) {
233
149k
    insn->id = insns[i].mapid;
234
235
149k
    if (h->detail_opt) {
236
149k
#ifndef CAPSTONE_DIET
237
149k
      memcpy(insn->detail->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
238
149k
      insn->detail->regs_read_count = (uint8_t)count_positive(insns[i].regs_use);
239
240
149k
      memcpy(insn->detail->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
241
149k
      insn->detail->regs_write_count = (uint8_t)count_positive(insns[i].regs_mod);
242
243
149k
      memcpy(insn->detail->groups, insns[i].groups, sizeof(insns[i].groups));
244
149k
      insn->detail->groups_count = (uint8_t)count_positive8(insns[i].groups);
245
246
149k
      if (insns[i].branch || insns[i].indirect_branch) {
247
        // this insn also belongs to JUMP group. add JUMP group
248
32.6k
        insn->detail->groups[insn->detail->groups_count] = MIPS_GRP_JUMP;
249
32.6k
        insn->detail->groups_count++;
250
32.6k
      }
251
149k
#endif
252
149k
    }
253
149k
  }
254
149k
}
255
256
static const name_map insn_name_maps[] = {
257
  { MIPS_INS_INVALID, NULL },
258
259
  { MIPS_INS_ABSQ_S, "absq_s" },
260
  { MIPS_INS_ADD, "add" },
261
  { MIPS_INS_ADDIUPC, "addiupc" },
262
  { MIPS_INS_ADDIUR1SP, "addiur1sp" },
263
  { MIPS_INS_ADDIUR2, "addiur2" },
264
  { MIPS_INS_ADDIUS5, "addius5" },
265
  { MIPS_INS_ADDIUSP, "addiusp" },
266
  { MIPS_INS_ADDQH, "addqh" },
267
  { MIPS_INS_ADDQH_R, "addqh_r" },
268
  { MIPS_INS_ADDQ, "addq" },
269
  { MIPS_INS_ADDQ_S, "addq_s" },
270
  { MIPS_INS_ADDSC, "addsc" },
271
  { MIPS_INS_ADDS_A, "adds_a" },
272
  { MIPS_INS_ADDS_S, "adds_s" },
273
  { MIPS_INS_ADDS_U, "adds_u" },
274
  { MIPS_INS_ADDU16, "addu16" },
275
  { MIPS_INS_ADDUH, "adduh" },
276
  { MIPS_INS_ADDUH_R, "adduh_r" },
277
  { MIPS_INS_ADDU, "addu" },
278
  { MIPS_INS_ADDU_S, "addu_s" },
279
  { MIPS_INS_ADDVI, "addvi" },
280
  { MIPS_INS_ADDV, "addv" },
281
  { MIPS_INS_ADDWC, "addwc" },
282
  { MIPS_INS_ADD_A, "add_a" },
283
  { MIPS_INS_ADDI, "addi" },
284
  { MIPS_INS_ADDIU, "addiu" },
285
  { MIPS_INS_ALIGN, "align" },
286
  { MIPS_INS_ALUIPC, "aluipc" },
287
  { MIPS_INS_AND, "and" },
288
  { MIPS_INS_AND16, "and16" },
289
  { MIPS_INS_ANDI16, "andi16" },
290
  { MIPS_INS_ANDI, "andi" },
291
  { MIPS_INS_APPEND, "append" },
292
  { MIPS_INS_ASUB_S, "asub_s" },
293
  { MIPS_INS_ASUB_U, "asub_u" },
294
  { MIPS_INS_AUI, "aui" },
295
  { MIPS_INS_AUIPC, "auipc" },
296
  { MIPS_INS_AVER_S, "aver_s" },
297
  { MIPS_INS_AVER_U, "aver_u" },
298
  { MIPS_INS_AVE_S, "ave_s" },
299
  { MIPS_INS_AVE_U, "ave_u" },
300
  { MIPS_INS_B16, "b16" },
301
  { MIPS_INS_BADDU, "baddu" },
302
  { MIPS_INS_BAL, "bal" },
303
  { MIPS_INS_BALC, "balc" },
304
  { MIPS_INS_BALIGN, "balign" },
305
  { MIPS_INS_BBIT0, "bbit0" },
306
  { MIPS_INS_BBIT032, "bbit032" },
307
  { MIPS_INS_BBIT1, "bbit1" },
308
  { MIPS_INS_BBIT132, "bbit132" },
309
  { MIPS_INS_BC, "bc" },
310
  { MIPS_INS_BC0F, "bc0f" },
311
  { MIPS_INS_BC0FL, "bc0fl" },
312
  { MIPS_INS_BC0T, "bc0t" },
313
  { MIPS_INS_BC0TL, "bc0tl" },
314
  { MIPS_INS_BC1EQZ, "bc1eqz" },
315
  { MIPS_INS_BC1F, "bc1f" },
316
  { MIPS_INS_BC1FL, "bc1fl" },
317
  { MIPS_INS_BC1NEZ, "bc1nez" },
318
  { MIPS_INS_BC1T, "bc1t" },
319
  { MIPS_INS_BC1TL, "bc1tl" },
320
  { MIPS_INS_BC2EQZ, "bc2eqz" },
321
  { MIPS_INS_BC2F, "bc2f" },
322
  { MIPS_INS_BC2FL, "bc2fl" },
323
  { MIPS_INS_BC2NEZ, "bc2nez" },
324
  { MIPS_INS_BC2T, "bc2t" },
325
  { MIPS_INS_BC2TL, "bc2tl" },
326
  { MIPS_INS_BC3F, "bc3f" },
327
  { MIPS_INS_BC3FL, "bc3fl" },
328
  { MIPS_INS_BC3T, "bc3t" },
329
  { MIPS_INS_BC3TL, "bc3tl" },
330
  { MIPS_INS_BCLRI, "bclri" },
331
  { MIPS_INS_BCLR, "bclr" },
332
  { MIPS_INS_BEQ, "beq" },
333
  { MIPS_INS_BEQC, "beqc" },
334
  { MIPS_INS_BEQL, "beql" },
335
  { MIPS_INS_BEQZ16, "beqz16" },
336
  { MIPS_INS_BEQZALC, "beqzalc" },
337
  { MIPS_INS_BEQZC, "beqzc" },
338
  { MIPS_INS_BGEC, "bgec" },
339
  { MIPS_INS_BGEUC, "bgeuc" },
340
  { MIPS_INS_BGEZ, "bgez" },
341
  { MIPS_INS_BGEZAL, "bgezal" },
342
  { MIPS_INS_BGEZALC, "bgezalc" },
343
  { MIPS_INS_BGEZALL, "bgezall" },
344
  { MIPS_INS_BGEZALS, "bgezals" },
345
  { MIPS_INS_BGEZC, "bgezc" },
346
  { MIPS_INS_BGEZL, "bgezl" },
347
  { MIPS_INS_BGTZ, "bgtz" },
348
  { MIPS_INS_BGTZALC, "bgtzalc" },
349
  { MIPS_INS_BGTZC, "bgtzc" },
350
  { MIPS_INS_BGTZL, "bgtzl" },
351
  { MIPS_INS_BINSLI, "binsli" },
352
  { MIPS_INS_BINSL, "binsl" },
353
  { MIPS_INS_BINSRI, "binsri" },
354
  { MIPS_INS_BINSR, "binsr" },
355
  { MIPS_INS_BITREV, "bitrev" },
356
  { MIPS_INS_BITSWAP, "bitswap" },
357
  { MIPS_INS_BLEZ, "blez" },
358
  { MIPS_INS_BLEZALC, "blezalc" },
359
  { MIPS_INS_BLEZC, "blezc" },
360
  { MIPS_INS_BLEZL, "blezl" },
361
  { MIPS_INS_BLTC, "bltc" },
362
  { MIPS_INS_BLTUC, "bltuc" },
363
  { MIPS_INS_BLTZ, "bltz" },
364
  { MIPS_INS_BLTZAL, "bltzal" },
365
  { MIPS_INS_BLTZALC, "bltzalc" },
366
  { MIPS_INS_BLTZALL, "bltzall" },
367
  { MIPS_INS_BLTZALS, "bltzals" },
368
  { MIPS_INS_BLTZC, "bltzc" },
369
  { MIPS_INS_BLTZL, "bltzl" },
370
  { MIPS_INS_BMNZI, "bmnzi" },
371
  { MIPS_INS_BMNZ, "bmnz" },
372
  { MIPS_INS_BMZI, "bmzi" },
373
  { MIPS_INS_BMZ, "bmz" },
374
  { MIPS_INS_BNE, "bne" },
375
  { MIPS_INS_BNEC, "bnec" },
376
  { MIPS_INS_BNEGI, "bnegi" },
377
  { MIPS_INS_BNEG, "bneg" },
378
  { MIPS_INS_BNEL, "bnel" },
379
  { MIPS_INS_BNEZ16, "bnez16" },
380
  { MIPS_INS_BNEZALC, "bnezalc" },
381
  { MIPS_INS_BNEZC, "bnezc" },
382
  { MIPS_INS_BNVC, "bnvc" },
383
  { MIPS_INS_BNZ, "bnz" },
384
  { MIPS_INS_BOVC, "bovc" },
385
  { MIPS_INS_BPOSGE32, "bposge32" },
386
  { MIPS_INS_BREAK, "break" },
387
  { MIPS_INS_BREAK16, "break16" },
388
  { MIPS_INS_BSELI, "bseli" },
389
  { MIPS_INS_BSEL, "bsel" },
390
  { MIPS_INS_BSETI, "bseti" },
391
  { MIPS_INS_BSET, "bset" },
392
  { MIPS_INS_BZ, "bz" },
393
  { MIPS_INS_BEQZ, "beqz" },
394
  { MIPS_INS_B, "b" },
395
  { MIPS_INS_BNEZ, "bnez" },
396
  { MIPS_INS_BTEQZ, "bteqz" },
397
  { MIPS_INS_BTNEZ, "btnez" },
398
  { MIPS_INS_CACHE, "cache" },
399
  { MIPS_INS_CEIL, "ceil" },
400
  { MIPS_INS_CEQI, "ceqi" },
401
  { MIPS_INS_CEQ, "ceq" },
402
  { MIPS_INS_CFC1, "cfc1" },
403
  { MIPS_INS_CFCMSA, "cfcmsa" },
404
  { MIPS_INS_CINS, "cins" },
405
  { MIPS_INS_CINS32, "cins32" },
406
  { MIPS_INS_CLASS, "class" },
407
  { MIPS_INS_CLEI_S, "clei_s" },
408
  { MIPS_INS_CLEI_U, "clei_u" },
409
  { MIPS_INS_CLE_S, "cle_s" },
410
  { MIPS_INS_CLE_U, "cle_u" },
411
  { MIPS_INS_CLO, "clo" },
412
  { MIPS_INS_CLTI_S, "clti_s" },
413
  { MIPS_INS_CLTI_U, "clti_u" },
414
  { MIPS_INS_CLT_S, "clt_s" },
415
  { MIPS_INS_CLT_U, "clt_u" },
416
  { MIPS_INS_CLZ, "clz" },
417
  { MIPS_INS_CMPGDU, "cmpgdu" },
418
  { MIPS_INS_CMPGU, "cmpgu" },
419
  { MIPS_INS_CMPU, "cmpu" },
420
  { MIPS_INS_CMP, "cmp" },
421
  { MIPS_INS_COPY_S, "copy_s" },
422
  { MIPS_INS_COPY_U, "copy_u" },
423
  { MIPS_INS_CTC1, "ctc1" },
424
  { MIPS_INS_CTCMSA, "ctcmsa" },
425
  { MIPS_INS_CVT, "cvt" },
426
  { MIPS_INS_C, "c" },
427
  { MIPS_INS_CMPI, "cmpi" },
428
  { MIPS_INS_DADD, "dadd" },
429
  { MIPS_INS_DADDI, "daddi" },
430
  { MIPS_INS_DADDIU, "daddiu" },
431
  { MIPS_INS_DADDU, "daddu" },
432
  { MIPS_INS_DAHI, "dahi" },
433
  { MIPS_INS_DALIGN, "dalign" },
434
  { MIPS_INS_DATI, "dati" },
435
  { MIPS_INS_DAUI, "daui" },
436
  { MIPS_INS_DBITSWAP, "dbitswap" },
437
  { MIPS_INS_DCLO, "dclo" },
438
  { MIPS_INS_DCLZ, "dclz" },
439
  { MIPS_INS_DDIV, "ddiv" },
440
  { MIPS_INS_DDIVU, "ddivu" },
441
  { MIPS_INS_DERET, "deret" },
442
  { MIPS_INS_DEXT, "dext" },
443
  { MIPS_INS_DEXTM, "dextm" },
444
  { MIPS_INS_DEXTU, "dextu" },
445
  { MIPS_INS_DI, "di" },
446
  { MIPS_INS_DINS, "dins" },
447
  { MIPS_INS_DINSM, "dinsm" },
448
  { MIPS_INS_DINSU, "dinsu" },
449
  { MIPS_INS_DIV, "div" },
450
  { MIPS_INS_DIVU, "divu" },
451
  { MIPS_INS_DIV_S, "div_s" },
452
  { MIPS_INS_DIV_U, "div_u" },
453
  { MIPS_INS_DLSA, "dlsa" },
454
  { MIPS_INS_DMFC0, "dmfc0" },
455
  { MIPS_INS_DMFC1, "dmfc1" },
456
  { MIPS_INS_DMFC2, "dmfc2" },
457
  { MIPS_INS_DMOD, "dmod" },
458
  { MIPS_INS_DMODU, "dmodu" },
459
  { MIPS_INS_DMTC0, "dmtc0" },
460
  { MIPS_INS_DMTC1, "dmtc1" },
461
  { MIPS_INS_DMTC2, "dmtc2" },
462
  { MIPS_INS_DMUH, "dmuh" },
463
  { MIPS_INS_DMUHU, "dmuhu" },
464
  { MIPS_INS_DMUL, "dmul" },
465
  { MIPS_INS_DMULT, "dmult" },
466
  { MIPS_INS_DMULTU, "dmultu" },
467
  { MIPS_INS_DMULU, "dmulu" },
468
  { MIPS_INS_DOTP_S, "dotp_s" },
469
  { MIPS_INS_DOTP_U, "dotp_u" },
470
  { MIPS_INS_DPADD_S, "dpadd_s" },
471
  { MIPS_INS_DPADD_U, "dpadd_u" },
472
  { MIPS_INS_DPAQX_SA, "dpaqx_sa" },
473
  { MIPS_INS_DPAQX_S, "dpaqx_s" },
474
  { MIPS_INS_DPAQ_SA, "dpaq_sa" },
475
  { MIPS_INS_DPAQ_S, "dpaq_s" },
476
  { MIPS_INS_DPAU, "dpau" },
477
  { MIPS_INS_DPAX, "dpax" },
478
  { MIPS_INS_DPA, "dpa" },
479
  { MIPS_INS_DPOP, "dpop" },
480
  { MIPS_INS_DPSQX_SA, "dpsqx_sa" },
481
  { MIPS_INS_DPSQX_S, "dpsqx_s" },
482
  { MIPS_INS_DPSQ_SA, "dpsq_sa" },
483
  { MIPS_INS_DPSQ_S, "dpsq_s" },
484
  { MIPS_INS_DPSUB_S, "dpsub_s" },
485
  { MIPS_INS_DPSUB_U, "dpsub_u" },
486
  { MIPS_INS_DPSU, "dpsu" },
487
  { MIPS_INS_DPSX, "dpsx" },
488
  { MIPS_INS_DPS, "dps" },
489
  { MIPS_INS_DROTR, "drotr" },
490
  { MIPS_INS_DROTR32, "drotr32" },
491
  { MIPS_INS_DROTRV, "drotrv" },
492
  { MIPS_INS_DSBH, "dsbh" },
493
  { MIPS_INS_DSHD, "dshd" },
494
  { MIPS_INS_DSLL, "dsll" },
495
  { MIPS_INS_DSLL32, "dsll32" },
496
  { MIPS_INS_DSLLV, "dsllv" },
497
  { MIPS_INS_DSRA, "dsra" },
498
  { MIPS_INS_DSRA32, "dsra32" },
499
  { MIPS_INS_DSRAV, "dsrav" },
500
  { MIPS_INS_DSRL, "dsrl" },
501
  { MIPS_INS_DSRL32, "dsrl32" },
502
  { MIPS_INS_DSRLV, "dsrlv" },
503
  { MIPS_INS_DSUB, "dsub" },
504
  { MIPS_INS_DSUBU, "dsubu" },
505
  { MIPS_INS_EHB, "ehb" },
506
  { MIPS_INS_EI, "ei" },
507
  { MIPS_INS_ERET, "eret" },
508
  { MIPS_INS_EXT, "ext" },
509
  { MIPS_INS_EXTP, "extp" },
510
  { MIPS_INS_EXTPDP, "extpdp" },
511
  { MIPS_INS_EXTPDPV, "extpdpv" },
512
  { MIPS_INS_EXTPV, "extpv" },
513
  { MIPS_INS_EXTRV_RS, "extrv_rs" },
514
  { MIPS_INS_EXTRV_R, "extrv_r" },
515
  { MIPS_INS_EXTRV_S, "extrv_s" },
516
  { MIPS_INS_EXTRV, "extrv" },
517
  { MIPS_INS_EXTR_RS, "extr_rs" },
518
  { MIPS_INS_EXTR_R, "extr_r" },
519
  { MIPS_INS_EXTR_S, "extr_s" },
520
  { MIPS_INS_EXTR, "extr" },
521
  { MIPS_INS_EXTS, "exts" },
522
  { MIPS_INS_EXTS32, "exts32" },
523
  { MIPS_INS_ABS, "abs" },
524
  { MIPS_INS_FADD, "fadd" },
525
  { MIPS_INS_FCAF, "fcaf" },
526
  { MIPS_INS_FCEQ, "fceq" },
527
  { MIPS_INS_FCLASS, "fclass" },
528
  { MIPS_INS_FCLE, "fcle" },
529
  { MIPS_INS_FCLT, "fclt" },
530
  { MIPS_INS_FCNE, "fcne" },
531
  { MIPS_INS_FCOR, "fcor" },
532
  { MIPS_INS_FCUEQ, "fcueq" },
533
  { MIPS_INS_FCULE, "fcule" },
534
  { MIPS_INS_FCULT, "fcult" },
535
  { MIPS_INS_FCUNE, "fcune" },
536
  { MIPS_INS_FCUN, "fcun" },
537
  { MIPS_INS_FDIV, "fdiv" },
538
  { MIPS_INS_FEXDO, "fexdo" },
539
  { MIPS_INS_FEXP2, "fexp2" },
540
  { MIPS_INS_FEXUPL, "fexupl" },
541
  { MIPS_INS_FEXUPR, "fexupr" },
542
  { MIPS_INS_FFINT_S, "ffint_s" },
543
  { MIPS_INS_FFINT_U, "ffint_u" },
544
  { MIPS_INS_FFQL, "ffql" },
545
  { MIPS_INS_FFQR, "ffqr" },
546
  { MIPS_INS_FILL, "fill" },
547
  { MIPS_INS_FLOG2, "flog2" },
548
  { MIPS_INS_FLOOR, "floor" },
549
  { MIPS_INS_FMADD, "fmadd" },
550
  { MIPS_INS_FMAX_A, "fmax_a" },
551
  { MIPS_INS_FMAX, "fmax" },
552
  { MIPS_INS_FMIN_A, "fmin_a" },
553
  { MIPS_INS_FMIN, "fmin" },
554
  { MIPS_INS_MOV, "mov" },
555
  { MIPS_INS_FMSUB, "fmsub" },
556
  { MIPS_INS_FMUL, "fmul" },
557
  { MIPS_INS_MUL, "mul" },
558
  { MIPS_INS_NEG, "neg" },
559
  { MIPS_INS_FRCP, "frcp" },
560
  { MIPS_INS_FRINT, "frint" },
561
  { MIPS_INS_FRSQRT, "frsqrt" },
562
  { MIPS_INS_FSAF, "fsaf" },
563
  { MIPS_INS_FSEQ, "fseq" },
564
  { MIPS_INS_FSLE, "fsle" },
565
  { MIPS_INS_FSLT, "fslt" },
566
  { MIPS_INS_FSNE, "fsne" },
567
  { MIPS_INS_FSOR, "fsor" },
568
  { MIPS_INS_FSQRT, "fsqrt" },
569
  { MIPS_INS_SQRT, "sqrt" },
570
  { MIPS_INS_FSUB, "fsub" },
571
  { MIPS_INS_SUB, "sub" },
572
  { MIPS_INS_FSUEQ, "fsueq" },
573
  { MIPS_INS_FSULE, "fsule" },
574
  { MIPS_INS_FSULT, "fsult" },
575
  { MIPS_INS_FSUNE, "fsune" },
576
  { MIPS_INS_FSUN, "fsun" },
577
  { MIPS_INS_FTINT_S, "ftint_s" },
578
  { MIPS_INS_FTINT_U, "ftint_u" },
579
  { MIPS_INS_FTQ, "ftq" },
580
  { MIPS_INS_FTRUNC_S, "ftrunc_s" },
581
  { MIPS_INS_FTRUNC_U, "ftrunc_u" },
582
  { MIPS_INS_HADD_S, "hadd_s" },
583
  { MIPS_INS_HADD_U, "hadd_u" },
584
  { MIPS_INS_HSUB_S, "hsub_s" },
585
  { MIPS_INS_HSUB_U, "hsub_u" },
586
  { MIPS_INS_ILVEV, "ilvev" },
587
  { MIPS_INS_ILVL, "ilvl" },
588
  { MIPS_INS_ILVOD, "ilvod" },
589
  { MIPS_INS_ILVR, "ilvr" },
590
  { MIPS_INS_INS, "ins" },
591
  { MIPS_INS_INSERT, "insert" },
592
  { MIPS_INS_INSV, "insv" },
593
  { MIPS_INS_INSVE, "insve" },
594
  { MIPS_INS_J, "j" },
595
  { MIPS_INS_JAL, "jal" },
596
  { MIPS_INS_JALR, "jalr" },
597
  { MIPS_INS_JALRS16, "jalrs16" },
598
  { MIPS_INS_JALRS, "jalrs" },
599
  { MIPS_INS_JALS, "jals" },
600
  { MIPS_INS_JALX, "jalx" },
601
  { MIPS_INS_JIALC, "jialc" },
602
  { MIPS_INS_JIC, "jic" },
603
  { MIPS_INS_JR, "jr" },
604
  { MIPS_INS_JR16, "jr16" },
605
  { MIPS_INS_JRADDIUSP, "jraddiusp" },
606
  { MIPS_INS_JRC, "jrc" },
607
  { MIPS_INS_JALRC, "jalrc" },
608
  { MIPS_INS_LB, "lb" },
609
  { MIPS_INS_LBU16, "lbu16" },
610
  { MIPS_INS_LBUX, "lbux" },
611
  { MIPS_INS_LBU, "lbu" },
612
  { MIPS_INS_LD, "ld" },
613
  { MIPS_INS_LDC1, "ldc1" },
614
  { MIPS_INS_LDC2, "ldc2" },
615
  { MIPS_INS_LDC3, "ldc3" },
616
  { MIPS_INS_LDI, "ldi" },
617
  { MIPS_INS_LDL, "ldl" },
618
  { MIPS_INS_LDPC, "ldpc" },
619
  { MIPS_INS_LDR, "ldr" },
620
  { MIPS_INS_LDXC1, "ldxc1" },
621
  { MIPS_INS_LH, "lh" },
622
  { MIPS_INS_LHU16, "lhu16" },
623
  { MIPS_INS_LHX, "lhx" },
624
  { MIPS_INS_LHU, "lhu" },
625
  { MIPS_INS_LI16, "li16" },
626
  { MIPS_INS_LL, "ll" },
627
  { MIPS_INS_LLD, "lld" },
628
  { MIPS_INS_LSA, "lsa" },
629
  { MIPS_INS_LUXC1, "luxc1" },
630
  { MIPS_INS_LUI, "lui" },
631
  { MIPS_INS_LW, "lw" },
632
  { MIPS_INS_LW16, "lw16" },
633
  { MIPS_INS_LWC1, "lwc1" },
634
  { MIPS_INS_LWC2, "lwc2" },
635
  { MIPS_INS_LWC3, "lwc3" },
636
  { MIPS_INS_LWL, "lwl" },
637
  { MIPS_INS_LWM16, "lwm16" },
638
  { MIPS_INS_LWM32, "lwm32" },
639
  { MIPS_INS_LWPC, "lwpc" },
640
  { MIPS_INS_LWP, "lwp" },
641
  { MIPS_INS_LWR, "lwr" },
642
  { MIPS_INS_LWUPC, "lwupc" },
643
  { MIPS_INS_LWU, "lwu" },
644
  { MIPS_INS_LWX, "lwx" },
645
  { MIPS_INS_LWXC1, "lwxc1" },
646
  { MIPS_INS_LWXS, "lwxs" },
647
  { MIPS_INS_LI, "li" },
648
  { MIPS_INS_MADD, "madd" },
649
  { MIPS_INS_MADDF, "maddf" },
650
  { MIPS_INS_MADDR_Q, "maddr_q" },
651
  { MIPS_INS_MADDU, "maddu" },
652
  { MIPS_INS_MADDV, "maddv" },
653
  { MIPS_INS_MADD_Q, "madd_q" },
654
  { MIPS_INS_MAQ_SA, "maq_sa" },
655
  { MIPS_INS_MAQ_S, "maq_s" },
656
  { MIPS_INS_MAXA, "maxa" },
657
  { MIPS_INS_MAXI_S, "maxi_s" },
658
  { MIPS_INS_MAXI_U, "maxi_u" },
659
  { MIPS_INS_MAX_A, "max_a" },
660
  { MIPS_INS_MAX, "max" },
661
  { MIPS_INS_MAX_S, "max_s" },
662
  { MIPS_INS_MAX_U, "max_u" },
663
  { MIPS_INS_MFC0, "mfc0" },
664
  { MIPS_INS_MFC1, "mfc1" },
665
  { MIPS_INS_MFC2, "mfc2" },
666
  { MIPS_INS_MFHC1, "mfhc1" },
667
  { MIPS_INS_MFHI, "mfhi" },
668
  { MIPS_INS_MFLO, "mflo" },
669
  { MIPS_INS_MINA, "mina" },
670
  { MIPS_INS_MINI_S, "mini_s" },
671
  { MIPS_INS_MINI_U, "mini_u" },
672
  { MIPS_INS_MIN_A, "min_a" },
673
  { MIPS_INS_MIN, "min" },
674
  { MIPS_INS_MIN_S, "min_s" },
675
  { MIPS_INS_MIN_U, "min_u" },
676
  { MIPS_INS_MOD, "mod" },
677
  { MIPS_INS_MODSUB, "modsub" },
678
  { MIPS_INS_MODU, "modu" },
679
  { MIPS_INS_MOD_S, "mod_s" },
680
  { MIPS_INS_MOD_U, "mod_u" },
681
  { MIPS_INS_MOVE, "move" },
682
  { MIPS_INS_MOVEP, "movep" },
683
  { MIPS_INS_MOVF, "movf" },
684
  { MIPS_INS_MOVN, "movn" },
685
  { MIPS_INS_MOVT, "movt" },
686
  { MIPS_INS_MOVZ, "movz" },
687
  { MIPS_INS_MSUB, "msub" },
688
  { MIPS_INS_MSUBF, "msubf" },
689
  { MIPS_INS_MSUBR_Q, "msubr_q" },
690
  { MIPS_INS_MSUBU, "msubu" },
691
  { MIPS_INS_MSUBV, "msubv" },
692
  { MIPS_INS_MSUB_Q, "msub_q" },
693
  { MIPS_INS_MTC0, "mtc0" },
694
  { MIPS_INS_MTC1, "mtc1" },
695
  { MIPS_INS_MTC2, "mtc2" },
696
  { MIPS_INS_MTHC1, "mthc1" },
697
  { MIPS_INS_MTHI, "mthi" },
698
  { MIPS_INS_MTHLIP, "mthlip" },
699
  { MIPS_INS_MTLO, "mtlo" },
700
  { MIPS_INS_MTM0, "mtm0" },
701
  { MIPS_INS_MTM1, "mtm1" },
702
  { MIPS_INS_MTM2, "mtm2" },
703
  { MIPS_INS_MTP0, "mtp0" },
704
  { MIPS_INS_MTP1, "mtp1" },
705
  { MIPS_INS_MTP2, "mtp2" },
706
  { MIPS_INS_MUH, "muh" },
707
  { MIPS_INS_MUHU, "muhu" },
708
  { MIPS_INS_MULEQ_S, "muleq_s" },
709
  { MIPS_INS_MULEU_S, "muleu_s" },
710
  { MIPS_INS_MULQ_RS, "mulq_rs" },
711
  { MIPS_INS_MULQ_S, "mulq_s" },
712
  { MIPS_INS_MULR_Q, "mulr_q" },
713
  { MIPS_INS_MULSAQ_S, "mulsaq_s" },
714
  { MIPS_INS_MULSA, "mulsa" },
715
  { MIPS_INS_MULT, "mult" },
716
  { MIPS_INS_MULTU, "multu" },
717
  { MIPS_INS_MULU, "mulu" },
718
  { MIPS_INS_MULV, "mulv" },
719
  { MIPS_INS_MUL_Q, "mul_q" },
720
  { MIPS_INS_MUL_S, "mul_s" },
721
  { MIPS_INS_NLOC, "nloc" },
722
  { MIPS_INS_NLZC, "nlzc" },
723
  { MIPS_INS_NMADD, "nmadd" },
724
  { MIPS_INS_NMSUB, "nmsub" },
725
  { MIPS_INS_NOR, "nor" },
726
  { MIPS_INS_NORI, "nori" },
727
  { MIPS_INS_NOT16, "not16" },
728
  { MIPS_INS_NOT, "not" },
729
  { MIPS_INS_OR, "or" },
730
  { MIPS_INS_OR16, "or16" },
731
  { MIPS_INS_ORI, "ori" },
732
  { MIPS_INS_PACKRL, "packrl" },
733
  { MIPS_INS_PAUSE, "pause" },
734
  { MIPS_INS_PCKEV, "pckev" },
735
  { MIPS_INS_PCKOD, "pckod" },
736
  { MIPS_INS_PCNT, "pcnt" },
737
  { MIPS_INS_PICK, "pick" },
738
  { MIPS_INS_POP, "pop" },
739
  { MIPS_INS_PRECEQU, "precequ" },
740
  { MIPS_INS_PRECEQ, "preceq" },
741
  { MIPS_INS_PRECEU, "preceu" },
742
  { MIPS_INS_PRECRQU_S, "precrqu_s" },
743
  { MIPS_INS_PRECRQ, "precrq" },
744
  { MIPS_INS_PRECRQ_RS, "precrq_rs" },
745
  { MIPS_INS_PRECR, "precr" },
746
  { MIPS_INS_PRECR_SRA, "precr_sra" },
747
  { MIPS_INS_PRECR_SRA_R, "precr_sra_r" },
748
  { MIPS_INS_PREF, "pref" },
749
  { MIPS_INS_PREPEND, "prepend" },
750
  { MIPS_INS_RADDU, "raddu" },
751
  { MIPS_INS_RDDSP, "rddsp" },
752
  { MIPS_INS_RDHWR, "rdhwr" },
753
  { MIPS_INS_REPLV, "replv" },
754
  { MIPS_INS_REPL, "repl" },
755
  { MIPS_INS_RINT, "rint" },
756
  { MIPS_INS_ROTR, "rotr" },
757
  { MIPS_INS_ROTRV, "rotrv" },
758
  { MIPS_INS_ROUND, "round" },
759
  { MIPS_INS_SAT_S, "sat_s" },
760
  { MIPS_INS_SAT_U, "sat_u" },
761
  { MIPS_INS_SB, "sb" },
762
  { MIPS_INS_SB16, "sb16" },
763
  { MIPS_INS_SC, "sc" },
764
  { MIPS_INS_SCD, "scd" },
765
  { MIPS_INS_SD, "sd" },
766
  { MIPS_INS_SDBBP, "sdbbp" },
767
  { MIPS_INS_SDBBP16, "sdbbp16" },
768
  { MIPS_INS_SDC1, "sdc1" },
769
  { MIPS_INS_SDC2, "sdc2" },
770
  { MIPS_INS_SDC3, "sdc3" },
771
  { MIPS_INS_SDL, "sdl" },
772
  { MIPS_INS_SDR, "sdr" },
773
  { MIPS_INS_SDXC1, "sdxc1" },
774
  { MIPS_INS_SEB, "seb" },
775
  { MIPS_INS_SEH, "seh" },
776
  { MIPS_INS_SELEQZ, "seleqz" },
777
  { MIPS_INS_SELNEZ, "selnez" },
778
  { MIPS_INS_SEL, "sel" },
779
  { MIPS_INS_SEQ, "seq" },
780
  { MIPS_INS_SEQI, "seqi" },
781
  { MIPS_INS_SH, "sh" },
782
  { MIPS_INS_SH16, "sh16" },
783
  { MIPS_INS_SHF, "shf" },
784
  { MIPS_INS_SHILO, "shilo" },
785
  { MIPS_INS_SHILOV, "shilov" },
786
  { MIPS_INS_SHLLV, "shllv" },
787
  { MIPS_INS_SHLLV_S, "shllv_s" },
788
  { MIPS_INS_SHLL, "shll" },
789
  { MIPS_INS_SHLL_S, "shll_s" },
790
  { MIPS_INS_SHRAV, "shrav" },
791
  { MIPS_INS_SHRAV_R, "shrav_r" },
792
  { MIPS_INS_SHRA, "shra" },
793
  { MIPS_INS_SHRA_R, "shra_r" },
794
  { MIPS_INS_SHRLV, "shrlv" },
795
  { MIPS_INS_SHRL, "shrl" },
796
  { MIPS_INS_SLDI, "sldi" },
797
  { MIPS_INS_SLD, "sld" },
798
  { MIPS_INS_SLL, "sll" },
799
  { MIPS_INS_SLL16, "sll16" },
800
  { MIPS_INS_SLLI, "slli" },
801
  { MIPS_INS_SLLV, "sllv" },
802
  { MIPS_INS_SLT, "slt" },
803
  { MIPS_INS_SLTI, "slti" },
804
  { MIPS_INS_SLTIU, "sltiu" },
805
  { MIPS_INS_SLTU, "sltu" },
806
  { MIPS_INS_SNE, "sne" },
807
  { MIPS_INS_SNEI, "snei" },
808
  { MIPS_INS_SPLATI, "splati" },
809
  { MIPS_INS_SPLAT, "splat" },
810
  { MIPS_INS_SRA, "sra" },
811
  { MIPS_INS_SRAI, "srai" },
812
  { MIPS_INS_SRARI, "srari" },
813
  { MIPS_INS_SRAR, "srar" },
814
  { MIPS_INS_SRAV, "srav" },
815
  { MIPS_INS_SRL, "srl" },
816
  { MIPS_INS_SRL16, "srl16" },
817
  { MIPS_INS_SRLI, "srli" },
818
  { MIPS_INS_SRLRI, "srlri" },
819
  { MIPS_INS_SRLR, "srlr" },
820
  { MIPS_INS_SRLV, "srlv" },
821
  { MIPS_INS_SSNOP, "ssnop" },
822
  { MIPS_INS_ST, "st" },
823
  { MIPS_INS_SUBQH, "subqh" },
824
  { MIPS_INS_SUBQH_R, "subqh_r" },
825
  { MIPS_INS_SUBQ, "subq" },
826
  { MIPS_INS_SUBQ_S, "subq_s" },
827
  { MIPS_INS_SUBSUS_U, "subsus_u" },
828
  { MIPS_INS_SUBSUU_S, "subsuu_s" },
829
  { MIPS_INS_SUBS_S, "subs_s" },
830
  { MIPS_INS_SUBS_U, "subs_u" },
831
  { MIPS_INS_SUBU16, "subu16" },
832
  { MIPS_INS_SUBUH, "subuh" },
833
  { MIPS_INS_SUBUH_R, "subuh_r" },
834
  { MIPS_INS_SUBU, "subu" },
835
  { MIPS_INS_SUBU_S, "subu_s" },
836
  { MIPS_INS_SUBVI, "subvi" },
837
  { MIPS_INS_SUBV, "subv" },
838
  { MIPS_INS_SUXC1, "suxc1" },
839
  { MIPS_INS_SW, "sw" },
840
  { MIPS_INS_SW16, "sw16" },
841
  { MIPS_INS_SWC1, "swc1" },
842
  { MIPS_INS_SWC2, "swc2" },
843
  { MIPS_INS_SWC3, "swc3" },
844
  { MIPS_INS_SWL, "swl" },
845
  { MIPS_INS_SWM16, "swm16" },
846
  { MIPS_INS_SWM32, "swm32" },
847
  { MIPS_INS_SWP, "swp" },
848
  { MIPS_INS_SWR, "swr" },
849
  { MIPS_INS_SWXC1, "swxc1" },
850
  { MIPS_INS_SYNC, "sync" },
851
  { MIPS_INS_SYNCI, "synci" },
852
  { MIPS_INS_SYSCALL, "syscall" },
853
  { MIPS_INS_TEQ, "teq" },
854
  { MIPS_INS_TEQI, "teqi" },
855
  { MIPS_INS_TGE, "tge" },
856
  { MIPS_INS_TGEI, "tgei" },
857
  { MIPS_INS_TGEIU, "tgeiu" },
858
  { MIPS_INS_TGEU, "tgeu" },
859
  { MIPS_INS_TLBP, "tlbp" },
860
  { MIPS_INS_TLBR, "tlbr" },
861
  { MIPS_INS_TLBWI, "tlbwi" },
862
  { MIPS_INS_TLBWR, "tlbwr" },
863
  { MIPS_INS_TLT, "tlt" },
864
  { MIPS_INS_TLTI, "tlti" },
865
  { MIPS_INS_TLTIU, "tltiu" },
866
  { MIPS_INS_TLTU, "tltu" },
867
  { MIPS_INS_TNE, "tne" },
868
  { MIPS_INS_TNEI, "tnei" },
869
  { MIPS_INS_TRUNC, "trunc" },
870
  { MIPS_INS_V3MULU, "v3mulu" },
871
  { MIPS_INS_VMM0, "vmm0" },
872
  { MIPS_INS_VMULU, "vmulu" },
873
  { MIPS_INS_VSHF, "vshf" },
874
  { MIPS_INS_WAIT, "wait" },
875
  { MIPS_INS_WRDSP, "wrdsp" },
876
  { MIPS_INS_WSBH, "wsbh" },
877
  { MIPS_INS_XOR, "xor" },
878
  { MIPS_INS_XOR16, "xor16" },
879
  { MIPS_INS_XORI, "xori" },
880
881
  // alias instructions
882
  { MIPS_INS_NOP, "nop" },
883
  { MIPS_INS_NEGU, "negu" },
884
885
  { MIPS_INS_JALR_HB, "jalr.hb" },
886
  { MIPS_INS_JR_HB, "jr.hb" },
887
};
888
889
const char *Mips_insn_name(csh handle, unsigned int id)
890
149k
{
891
149k
#ifndef CAPSTONE_DIET
892
149k
  if (id >= MIPS_INS_ENDING)
893
0
    return NULL;
894
895
149k
  return insn_name_maps[id].name;
896
#else
897
  return NULL;
898
#endif
899
149k
}
900
901
#ifndef CAPSTONE_DIET
902
static const name_map group_name_maps[] = {
903
  // generic groups
904
  { MIPS_GRP_INVALID, NULL },
905
  { MIPS_GRP_JUMP, "jump" },
906
  { MIPS_GRP_CALL, "call" },
907
  { MIPS_GRP_RET, "ret" },
908
  { MIPS_GRP_INT, "int" },
909
  { MIPS_GRP_IRET, "iret" },
910
  { MIPS_GRP_PRIVILEGE, "privileged" },
911
  { MIPS_GRP_BRANCH_RELATIVE, "branch_relative" },
912
913
  // architecture-specific groups
914
  { MIPS_GRP_BITCOUNT, "bitcount" },
915
  { MIPS_GRP_DSP, "dsp" },
916
  { MIPS_GRP_DSPR2, "dspr2" },
917
  { MIPS_GRP_FPIDX, "fpidx" },
918
  { MIPS_GRP_MSA, "msa" },
919
  { MIPS_GRP_MIPS32R2, "mips32r2" },
920
  { MIPS_GRP_MIPS64, "mips64" },
921
  { MIPS_GRP_MIPS64R2, "mips64r2" },
922
  { MIPS_GRP_SEINREG, "seinreg" },
923
  { MIPS_GRP_STDENC, "stdenc" },
924
  { MIPS_GRP_SWAP, "swap" },
925
  { MIPS_GRP_MICROMIPS, "micromips" },
926
  { MIPS_GRP_MIPS16MODE, "mips16mode" },
927
  { MIPS_GRP_FP64BIT, "fp64bit" },
928
  { MIPS_GRP_NONANSFPMATH, "nonansfpmath" },
929
  { MIPS_GRP_NOTFP64BIT, "notfp64bit" },
930
  { MIPS_GRP_NOTINMICROMIPS, "notinmicromips" },
931
  { MIPS_GRP_NOTNACL, "notnacl" },
932
933
  { MIPS_GRP_NOTMIPS32R6, "notmips32r6" },
934
  { MIPS_GRP_NOTMIPS64R6, "notmips64r6" },
935
  { MIPS_GRP_CNMIPS, "cnmips" },
936
937
  { MIPS_GRP_MIPS32, "mips32" },
938
  { MIPS_GRP_MIPS32R6, "mips32r6" },
939
  { MIPS_GRP_MIPS64R6, "mips64r6" },
940
941
  { MIPS_GRP_MIPS2, "mips2" },
942
  { MIPS_GRP_MIPS3, "mips3" },
943
  { MIPS_GRP_MIPS3_32, "mips3_32"},
944
  { MIPS_GRP_MIPS3_32R2, "mips3_32r2" },
945
946
  { MIPS_GRP_MIPS4_32, "mips4_32" },
947
  { MIPS_GRP_MIPS4_32R2, "mips4_32r2" },
948
  { MIPS_GRP_MIPS5_32R2, "mips5_32r2" },
949
950
  { MIPS_GRP_GP32BIT, "gp32bit" },
951
  { MIPS_GRP_GP64BIT, "gp64bit" },
952
};
953
#endif
954
955
const char *Mips_group_name(csh handle, unsigned int id)
956
324k
{
957
324k
#ifndef CAPSTONE_DIET
958
324k
  return id2name(group_name_maps, ARR_SIZE(group_name_maps), id);
959
#else
960
  return NULL;
961
#endif
962
324k
}
963
964
// map instruction name to public instruction ID
965
mips_reg Mips_map_insn(const char *name)
966
13.0k
{
967
  // handle special alias first
968
13.0k
  unsigned int i;
969
970
  // NOTE: skip first NULL name in insn_name_maps
971
13.0k
  i = name2id(&insn_name_maps[1], ARR_SIZE(insn_name_maps) - 1, name);
972
973
13.0k
  return (i != -1)? i : MIPS_REG_INVALID;
974
13.0k
}
975
976
// map internal raw register to 'public' register
977
mips_reg Mips_map_register(unsigned int r)
978
241k
{
979
  // for some reasons different Mips modes can map different register number to
980
  // the same Mips register. this function handles the issue for exposing Mips
981
  // operands by mapping internal registers to 'public' register.
982
241k
  static const unsigned int map[] = { 0,
983
241k
    MIPS_REG_AT, MIPS_REG_DSPCCOND, MIPS_REG_DSPCARRY, MIPS_REG_DSPEFI, MIPS_REG_DSPOUTFLAG,
984
241k
    MIPS_REG_DSPPOS, MIPS_REG_DSPSCOUNT, MIPS_REG_FP, MIPS_REG_GP, MIPS_REG_2,
985
241k
    MIPS_REG_1, MIPS_REG_0, MIPS_REG_6, MIPS_REG_4, MIPS_REG_5,
986
241k
    MIPS_REG_3, MIPS_REG_7, MIPS_REG_PC, MIPS_REG_RA, MIPS_REG_SP,
987
241k
    MIPS_REG_ZERO, MIPS_REG_A0, MIPS_REG_A1, MIPS_REG_A2, MIPS_REG_A3,
988
241k
    MIPS_REG_AC0, MIPS_REG_AC1, MIPS_REG_AC2, MIPS_REG_AC3, MIPS_REG_AT,
989
241k
    MIPS_REG_CC0, MIPS_REG_CC1, MIPS_REG_CC2, MIPS_REG_CC3, MIPS_REG_CC4,
990
241k
    MIPS_REG_CC5, MIPS_REG_CC6, MIPS_REG_CC7, MIPS_REG_0, MIPS_REG_1,
991
241k
    MIPS_REG_2, MIPS_REG_3, MIPS_REG_4, MIPS_REG_5, MIPS_REG_6,
992
241k
    MIPS_REG_7, MIPS_REG_8, MIPS_REG_9, MIPS_REG_0, MIPS_REG_1,
993
241k
    MIPS_REG_2, MIPS_REG_3, MIPS_REG_4, MIPS_REG_5, MIPS_REG_6,
994
241k
    MIPS_REG_7, MIPS_REG_8, MIPS_REG_9, MIPS_REG_10, MIPS_REG_11,
995
241k
    MIPS_REG_12, MIPS_REG_13, MIPS_REG_14, MIPS_REG_15, MIPS_REG_16,
996
241k
    MIPS_REG_17, MIPS_REG_18, MIPS_REG_19, MIPS_REG_20, MIPS_REG_21,
997
241k
    MIPS_REG_22, MIPS_REG_23, MIPS_REG_24, MIPS_REG_25, MIPS_REG_26,
998
241k
    MIPS_REG_27, MIPS_REG_28, MIPS_REG_29, MIPS_REG_30, MIPS_REG_31,
999
241k
    MIPS_REG_10, MIPS_REG_11, MIPS_REG_12, MIPS_REG_13, MIPS_REG_14,
1000
241k
    MIPS_REG_15, MIPS_REG_16, MIPS_REG_17, MIPS_REG_18, MIPS_REG_19,
1001
241k
    MIPS_REG_20, MIPS_REG_21, MIPS_REG_22, MIPS_REG_23, MIPS_REG_24,
1002
241k
    MIPS_REG_25, MIPS_REG_26, MIPS_REG_27, MIPS_REG_28, MIPS_REG_29,
1003
241k
    MIPS_REG_30, MIPS_REG_31, MIPS_REG_F0, MIPS_REG_F2, MIPS_REG_F4,
1004
241k
    MIPS_REG_F6, MIPS_REG_F8, MIPS_REG_F10, MIPS_REG_F12, MIPS_REG_F14,
1005
241k
    MIPS_REG_F16, MIPS_REG_F18, MIPS_REG_F20, MIPS_REG_F22, MIPS_REG_F24,
1006
241k
    MIPS_REG_F26, MIPS_REG_F28, MIPS_REG_F30, MIPS_REG_DSPOUTFLAG20, MIPS_REG_DSPOUTFLAG21,
1007
241k
    MIPS_REG_DSPOUTFLAG22, MIPS_REG_DSPOUTFLAG23, MIPS_REG_F0, MIPS_REG_F1, MIPS_REG_F2,
1008
241k
    MIPS_REG_F3, MIPS_REG_F4, MIPS_REG_F5, MIPS_REG_F6, MIPS_REG_F7,
1009
241k
    MIPS_REG_F8, MIPS_REG_F9, MIPS_REG_F10, MIPS_REG_F11, MIPS_REG_F12,
1010
241k
    MIPS_REG_F13, MIPS_REG_F14, MIPS_REG_F15, MIPS_REG_F16, MIPS_REG_F17,
1011
241k
    MIPS_REG_F18, MIPS_REG_F19, MIPS_REG_F20, MIPS_REG_F21, MIPS_REG_F22,
1012
241k
    MIPS_REG_F23, MIPS_REG_F24, MIPS_REG_F25, MIPS_REG_F26, MIPS_REG_F27,
1013
241k
    MIPS_REG_F28, MIPS_REG_F29, MIPS_REG_F30, MIPS_REG_F31, MIPS_REG_FCC0,
1014
241k
    MIPS_REG_FCC1, MIPS_REG_FCC2, MIPS_REG_FCC3, MIPS_REG_FCC4, MIPS_REG_FCC5,
1015
241k
    MIPS_REG_FCC6, MIPS_REG_FCC7, MIPS_REG_0, MIPS_REG_1, MIPS_REG_2,
1016
241k
    MIPS_REG_3, MIPS_REG_4, MIPS_REG_5, MIPS_REG_6, MIPS_REG_7,
1017
241k
    MIPS_REG_8, MIPS_REG_9, MIPS_REG_10, MIPS_REG_11, MIPS_REG_12,
1018
241k
    MIPS_REG_13, MIPS_REG_14, MIPS_REG_15, MIPS_REG_16, MIPS_REG_17,
1019
241k
    MIPS_REG_18, MIPS_REG_19, MIPS_REG_20, MIPS_REG_21, MIPS_REG_22,
1020
241k
    MIPS_REG_23, MIPS_REG_24, MIPS_REG_25, MIPS_REG_26, MIPS_REG_27,
1021
241k
    MIPS_REG_28, MIPS_REG_29, MIPS_REG_30, MIPS_REG_31, MIPS_REG_FP,
1022
241k
    MIPS_REG_F0, MIPS_REG_F1, MIPS_REG_F2, MIPS_REG_F3, MIPS_REG_F4,
1023
241k
    MIPS_REG_F5, MIPS_REG_F6, MIPS_REG_F7, MIPS_REG_F8, MIPS_REG_F9,
1024
241k
    MIPS_REG_F10, MIPS_REG_F11, MIPS_REG_F12, MIPS_REG_F13, MIPS_REG_F14,
1025
241k
    MIPS_REG_F15, MIPS_REG_F16, MIPS_REG_F17, MIPS_REG_F18, MIPS_REG_F19,
1026
241k
    MIPS_REG_F20, MIPS_REG_F21, MIPS_REG_F22, MIPS_REG_F23, MIPS_REG_F24,
1027
241k
    MIPS_REG_F25, MIPS_REG_F26, MIPS_REG_F27, MIPS_REG_F28, MIPS_REG_F29,
1028
241k
    MIPS_REG_F30, MIPS_REG_F31, MIPS_REG_GP, MIPS_REG_AC0, MIPS_REG_AC1,
1029
241k
    MIPS_REG_AC2, MIPS_REG_AC3, 0, 0, 0,
1030
241k
    0, MIPS_REG_4, MIPS_REG_5, MIPS_REG_6, MIPS_REG_7,
1031
241k
    MIPS_REG_8, MIPS_REG_9, MIPS_REG_10, MIPS_REG_11, MIPS_REG_12,
1032
241k
    MIPS_REG_13, MIPS_REG_14, MIPS_REG_15, MIPS_REG_16, MIPS_REG_17,
1033
241k
    MIPS_REG_18, MIPS_REG_19, MIPS_REG_20, MIPS_REG_21, MIPS_REG_22,
1034
241k
    MIPS_REG_23, MIPS_REG_24, MIPS_REG_25, MIPS_REG_26, MIPS_REG_27,
1035
241k
    MIPS_REG_28, MIPS_REG_29, MIPS_REG_30, MIPS_REG_31, MIPS_REG_K0,
1036
241k
    MIPS_REG_K1, MIPS_REG_AC0, MIPS_REG_AC1, MIPS_REG_AC2, MIPS_REG_AC3,
1037
241k
    MIPS_REG_MPL0, MIPS_REG_MPL1, MIPS_REG_MPL2, MIPS_REG_P0, MIPS_REG_P1,
1038
241k
    MIPS_REG_P2, MIPS_REG_RA, MIPS_REG_S0, MIPS_REG_S1, MIPS_REG_S2,
1039
241k
    MIPS_REG_S3, MIPS_REG_S4, MIPS_REG_S5, MIPS_REG_S6, MIPS_REG_S7,
1040
241k
    MIPS_REG_SP, MIPS_REG_T0, MIPS_REG_T1, MIPS_REG_T2, MIPS_REG_T3,
1041
241k
    MIPS_REG_T4, MIPS_REG_T5, MIPS_REG_T6, MIPS_REG_T7, MIPS_REG_T8,
1042
241k
    MIPS_REG_T9, MIPS_REG_V0, MIPS_REG_V1, MIPS_REG_W0, MIPS_REG_W1,
1043
241k
    MIPS_REG_W2, MIPS_REG_W3, MIPS_REG_W4, MIPS_REG_W5, MIPS_REG_W6,
1044
241k
    MIPS_REG_W7, MIPS_REG_W8, MIPS_REG_W9, MIPS_REG_W10, MIPS_REG_W11,
1045
241k
    MIPS_REG_W12, MIPS_REG_W13, MIPS_REG_W14, MIPS_REG_W15, MIPS_REG_W16,
1046
241k
    MIPS_REG_W17, MIPS_REG_W18, MIPS_REG_W19, MIPS_REG_W20, MIPS_REG_W21,
1047
241k
    MIPS_REG_W22, MIPS_REG_W23, MIPS_REG_W24, MIPS_REG_W25, MIPS_REG_W26,
1048
241k
    MIPS_REG_W27, MIPS_REG_W28, MIPS_REG_W29, MIPS_REG_W30, MIPS_REG_W31,
1049
241k
    MIPS_REG_ZERO, MIPS_REG_A0, MIPS_REG_A1, MIPS_REG_A2, MIPS_REG_A3,
1050
241k
    MIPS_REG_AC0, MIPS_REG_F0, MIPS_REG_F1, MIPS_REG_F2, MIPS_REG_F3,
1051
241k
    MIPS_REG_F4, MIPS_REG_F5, MIPS_REG_F6, MIPS_REG_F7, MIPS_REG_F8,
1052
241k
    MIPS_REG_F9, MIPS_REG_F10, MIPS_REG_F11, MIPS_REG_F12, MIPS_REG_F13,
1053
241k
    MIPS_REG_F14, MIPS_REG_F15, MIPS_REG_F16, MIPS_REG_F17, MIPS_REG_F18,
1054
241k
    MIPS_REG_F19, MIPS_REG_F20, MIPS_REG_F21, MIPS_REG_F22, MIPS_REG_F23,
1055
241k
    MIPS_REG_F24, MIPS_REG_F25, MIPS_REG_F26, MIPS_REG_F27, MIPS_REG_F28,
1056
241k
    MIPS_REG_F29, MIPS_REG_F30, MIPS_REG_F31, MIPS_REG_DSPOUTFLAG16_19, MIPS_REG_HI,
1057
241k
    MIPS_REG_K0, MIPS_REG_K1, MIPS_REG_LO, MIPS_REG_S0, MIPS_REG_S1,
1058
241k
    MIPS_REG_S2, MIPS_REG_S3, MIPS_REG_S4, MIPS_REG_S5, MIPS_REG_S6,
1059
241k
    MIPS_REG_S7, MIPS_REG_T0, MIPS_REG_T1, MIPS_REG_T2, MIPS_REG_T3,
1060
241k
    MIPS_REG_T4, MIPS_REG_T5, MIPS_REG_T6, MIPS_REG_T7, MIPS_REG_T8,
1061
241k
    MIPS_REG_T9, MIPS_REG_V0, MIPS_REG_V1
1062
241k
  };
1063
1064
241k
  if (r < ARR_SIZE(map))
1065
241k
    return map[r];
1066
1067
  // cannot find this register
1068
0
  return 0;
1069
241k
}
1070
1071
#endif