xref: /qemu/disas/nanomips.c (revision c3bef3b4)
1 /*
2  *  Source file for nanoMIPS disassembler component of QEMU
3  *
4  *  Copyright (C) 2018  Wave Computing, Inc.
5  *  Copyright (C) 2018  Matthew Fortune <matthew.fortune@mips.com>
6  *  Copyright (C) 2018  Aleksandar Markovic <amarkovic@wavecomp.com>
7  *
8  *  This program is free software: you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation, either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
20  *
21  */
22 
23 /*
24  *  Documentation used while implementing this component:
25  *
26  *  [1] "MIPS® Architecture Base: nanoMIPS32(tm) Instruction Set Technical
27  *      Reference Manual", Revision 01.01, April 27, 2018
28  */
29 
30 #include "qemu/osdep.h"
31 #include "disas/dis-asm.h"
32 
33 typedef int64_t int64;
34 typedef uint64_t uint64;
35 typedef uint32_t uint32;
36 typedef uint16_t uint16;
37 typedef uint64_t img_address;
38 
39 typedef enum  {
40     instruction,
41     call_instruction,
42     branch_instruction,
43     return_instruction,
44     reserved_block,
45     pool,
46 } TABLE_ENTRY_TYPE;
47 
48 typedef enum {
49     MIPS64_    = 0x00000001,
50     XNP_       = 0x00000002,
51     XMMS_      = 0x00000004,
52     EVA_       = 0x00000008,
53     DSP_       = 0x00000010,
54     MT_        = 0x00000020,
55     EJTAG_     = 0x00000040,
56     TLBINV_    = 0x00000080,
57     CP0_       = 0x00000100,
58     CP1_       = 0x00000200,
59     CP2_       = 0x00000400,
60     UDI_       = 0x00000800,
61     MCU_       = 0x00001000,
62     VZ_        = 0x00002000,
63     TLB_       = 0x00004000,
64     MVH_       = 0x00008000,
65     ALL_ATTRIBUTES = 0xffffffffull,
66 } TABLE_ATTRIBUTE_TYPE;
67 
68 typedef struct Dis_info {
69   img_address m_pc;
70   fprintf_function fprintf_func;
71   FILE *stream;
72   sigjmp_buf buf;
73 } Dis_info;
74 
75 typedef bool (*conditional_function)(uint64 instruction);
76 typedef char * (*disassembly_function)(uint64 instruction,
77                                             Dis_info *info);
78 
79 typedef struct Pool {
80     TABLE_ENTRY_TYPE     type;
81     const struct Pool    *next_table;
82     int                  next_table_size;
83     int                  instructions_size;
84     uint64               mask;
85     uint64               value;
86     disassembly_function disassembly;
87     conditional_function condition;
88     uint64               attributes;
89 } Pool;
90 
91 #define IMGASSERTONCE(test)
92 
93 
94 static char * G_GNUC_PRINTF(1, 2) img_format(const char *format, ...)
95 {
96     char *buffer;
97     va_list args;
98     va_start(args, format);
99     buffer = g_strdup_vprintf(format, args);
100     va_end(args);
101     return buffer;
102 }
103 
104 
105 static char *to_string(img_address a)
106 {
107     return g_strdup_printf("0x%" PRIx64, a);
108 }
109 
110 
111 static uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
112 {
113     return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
114 }
115 
116 
117 static int64 sign_extend(int64 data, int msb)
118 {
119     uint64 shift = 63 - msb;
120     return (data << shift) >> shift;
121 }
122 
123 
124 static uint64 renumber_registers(uint64 index, uint64 *register_list,
125                                size_t register_list_size, Dis_info *info)
126 {
127     if (index < register_list_size) {
128         return register_list[index];
129     }
130 
131     info->fprintf_func(info->stream, "Invalid register mapping index %" PRIu64
132                        ", size of list = %zu", index, register_list_size);
133     siglongjmp(info->buf, 1);
134 }
135 
136 
137 /*
138  * decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
139  *
140  *   Map a 4-bit code to the 5-bit register space according to this pattern:
141  *
142  *                              1                   0
143  *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
144  *                    | | | | | | | | | | | | | | | |
145  *                    | | | | | | | | | | | | | | | |
146  *                    | | | | | | | | | | | └---------------┐
147  *                    | | | | | | | | | | └---------------┐ |
148  *                    | | | | | | | | | └---------------┐ | |
149  *                    | | | | | | | | └---------------┐ | | |
150  *                    | | | | | | | |         | | | | | | | |
151  *                    | | | | | | | |         | | | | | | | |
152  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
153  *      3                   2                   1                   0
154  *
155  *   Used in handling following instructions:
156  *
157  *     - ADDU[4X4]
158  *     - LW[4X4]
159  *     - MOVEP[REV]
160  *     - MUL[4X4]
161  *     - SW[4X4]
162  */
163 static uint64 decode_gpr_gpr4(uint64 d, Dis_info *info)
164 {
165     static uint64 register_list[] = {  8,  9, 10, 11,  4,  5,  6,  7,
166                                       16, 17, 18, 19, 20, 21, 22, 23 };
167     return renumber_registers(d, register_list,
168                sizeof(register_list) / sizeof(register_list[0]), info);
169 }
170 
171 
172 /*
173  * decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
174  *
175  *   Map a 4-bit code to the 5-bit register space according to this pattern:
176  *
177  *                              1                   0
178  *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
179  *                    | | | | | | | | | | | | | | | |
180  *                    | | | | | | | | | | | | └---------------------┐
181  *                    | | | | | | | | | | | └---------------┐       |
182  *                    | | | | | | | | | | └---------------┐ |       |
183  *                    | | | | | | | | | └---------------┐ | |       |
184  *                    | | | | | | | | └---------------┐ | | |       |
185  *                    | | | | | | | |           | | | | | | |       |
186  *                    | | | | | | | |           | | | | | | |       |
187  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
188  *      3                   2                   1                   0
189  *
190  *   This pattern is the same one used for 'gpr4' gpr encoding type, except for
191  * the input value 3, that is mapped to the output value 0 instead of 11.
192  *
193  *   Used in handling following instructions:
194  *
195  *     - MOVE.BALC
196  *     - MOVEP
197  *     - SW[4X4]
198  */
199 static uint64 decode_gpr_gpr4_zero(uint64 d, Dis_info *info)
200 {
201     static uint64 register_list[] = {  8,  9, 10,  0,  4,  5,  6,  7,
202                                       16, 17, 18, 19, 20, 21, 22, 23 };
203     return renumber_registers(d, register_list,
204                sizeof(register_list) / sizeof(register_list[0]), info);
205 }
206 
207 
208 /*
209  * decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
210  *
211  *   Map a 3-bit code to the 5-bit register space according to this pattern:
212  *
213  *                            7 6 5 4 3 2 1 0
214  *                            | | | | | | | |
215  *                            | | | | | | | |
216  *                            | | | └-----------------------┐
217  *                            | | └-----------------------┐ |
218  *                            | └-----------------------┐ | |
219  *                            └-----------------------┐ | | |
220  *                                    | | | |         | | | |
221  *                            ┌-------┘ | | |         | | | |
222  *                            | ┌-------┘ | |         | | | |
223  *                            | | ┌-------┘ |         | | | |
224  *                            | | | ┌-------┘         | | | |
225  *                            | | | |                 | | | |
226  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
227  *      3                   2                   1                   0
228  *
229  *   Used in handling following instructions:
230  *
231  *     - ADDIU[R1.SP]
232  *     - ADDIU[R2]
233  *     - ADDU[16]
234  *     - AND[16]
235  *     - ANDI[16]
236  *     - BEQC[16]
237  *     - BEQZC[16]
238  *     - BNEC[16]
239  *     - BNEZC[16]
240  *     - LB[16]
241  *     - LBU[16]
242  *     - LH[16]
243  *     - LHU[16]
244  *     - LI[16]
245  *     - LW[16]
246  *     - LW[GP16]
247  *     - LWXS[16]
248  *     - NOT[16]
249  *     - OR[16]
250  *     - SB[16]
251  *     - SH[16]
252  *     - SLL[16]
253  *     - SRL[16]
254  *     - SUBU[16]
255  *     - SW[16]
256  *     - XOR[16]
257  */
258 static uint64 decode_gpr_gpr3(uint64 d, Dis_info *info)
259 {
260     static uint64 register_list[] = { 16, 17, 18, 19,  4,  5,  6,  7 };
261     return renumber_registers(d, register_list,
262                sizeof(register_list) / sizeof(register_list[0]), info);
263 }
264 
265 
266 /*
267  * decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
268  *     type
269  *
270  *   Map a 3-bit code to the 5-bit register space according to this pattern:
271  *
272  *                            7 6 5 4 3 2 1 0
273  *                            | | | | | | | |
274  *                            | | | | | | | └-----------------------┐
275  *                            | | | └-----------------------┐       |
276  *                            | | └-----------------------┐ |       |
277  *                            | └-----------------------┐ | |       |
278  *                            └-----------------------┐ | | |       |
279  *                                    | | |           | | | |       |
280  *                            ┌-------┘ | |           | | | |       |
281  *                            | ┌-------┘ |           | | | |       |
282  *                            | | ┌-------┘           | | | |       |
283  *                            | | |                   | | | |       |
284  *                            | | |                   | | | |       |
285  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
286  *      3                   2                   1                   0
287  *
288  *   This pattern is the same one used for 'gpr3' gpr encoding type, except for
289  * the input value 0, that is mapped to the output value 0 instead of 16.
290  *
291  *   Used in handling following instructions:
292  *
293  *     - SB[16]
294  *     - SH[16]
295  *     - SW[16]
296  *     - SW[GP16]
297  */
298 static uint64 decode_gpr_gpr3_src_store(uint64 d, Dis_info *info)
299 {
300     static uint64 register_list[] = {  0, 17, 18, 19,  4,  5,  6,  7 };
301     return renumber_registers(d, register_list,
302                sizeof(register_list) / sizeof(register_list[0]), info);
303 }
304 
305 
306 /*
307  * decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
308  *
309  *   Map a 2-bit code to the 5-bit register space according to this pattern:
310  *
311  *                                3 2 1 0
312  *                                | | | |
313  *                                | | | |
314  *                                | | | └-------------------┐
315  *                                | | └-------------------┐ |
316  *                                | └-------------------┐ | |
317  *                                └-------------------┐ | | |
318  *                                                    | | | |
319  *                                                    | | | |
320  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
321  *      3                   2                   1                   0
322  *
323  *   Used in handling following instructions:
324  *
325  *     - MOVEP
326  *     - MOVEP[REV]
327  */
328 static uint64 decode_gpr_gpr2_reg1(uint64 d, Dis_info *info)
329 {
330     static uint64 register_list[] = {  4,  5,  6,  7 };
331     return renumber_registers(d, register_list,
332                sizeof(register_list) / sizeof(register_list[0]), info);
333 }
334 
335 
336 /*
337  * decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
338  *
339  *   Map a 2-bit code to the 5-bit register space according to this pattern:
340  *
341  *                                3 2 1 0
342  *                                | | | |
343  *                                | | | |
344  *                                | | | └-----------------┐
345  *                                | | └-----------------┐ |
346  *                                | └-----------------┐ | |
347  *                                └-----------------┐ | | |
348  *                                                  | | | |
349  *                                                  | | | |
350  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
351  *      3                   2                   1                   0
352  *
353  *   Used in handling following instructions:
354  *
355  *     - MOVEP
356  *     - MOVEP[REV]
357  */
358 static uint64 decode_gpr_gpr2_reg2(uint64 d, Dis_info *info)
359 {
360     static uint64 register_list[] = {  5,  6,  7,  8 };
361     return renumber_registers(d, register_list,
362                sizeof(register_list) / sizeof(register_list[0]), info);
363 }
364 
365 
366 /*
367  * decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
368  *
369  *   Map a 1-bit code to the 5-bit register space according to this pattern:
370  *
371  *                                  1 0
372  *                                  | |
373  *                                  | |
374  *                                  | └---------------------┐
375  *                                  └---------------------┐ |
376  *                                                        | |
377  *                                                        | |
378  *                                                        | |
379  *                                                        | |
380  *    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
381  *      3                   2                   1                   0
382  *
383  *   Used in handling following instruction:
384  *
385  *     - MOVE.BALC
386  */
387 static uint64 decode_gpr_gpr1(uint64 d, Dis_info *info)
388 {
389     static uint64 register_list[] = {  4,  5 };
390     return renumber_registers(d, register_list,
391                sizeof(register_list) / sizeof(register_list[0]), info);
392 }
393 
394 
395 static int64 neg_copy(uint64 d)
396 {
397     return 0ll - d;
398 }
399 
400 
401 static uint64 encode_count3_from_count(uint64 d)
402 {
403     IMGASSERTONCE(d < 8);
404     return d == 0ull ? 8ull : d;
405 }
406 
407 
408 static uint64 encode_shift3_from_shift(uint64 d)
409 {
410     IMGASSERTONCE(d < 8);
411     return d == 0ull ? 8ull : d;
412 }
413 
414 
415 /* special value for load literal */
416 static int64 encode_eu_from_s_li16(uint64 d)
417 {
418     IMGASSERTONCE(d < 128);
419     return d == 127 ? -1 : (int64)d;
420 }
421 
422 
423 static uint64 encode_msbd_from_size(uint64 d)
424 {
425     IMGASSERTONCE(d < 32);
426     return d + 1;
427 }
428 
429 
430 static uint64 encode_eu_from_u_andi16(uint64 d)
431 {
432     IMGASSERTONCE(d < 16);
433     if (d == 12) {
434         return 0x00ffull;
435     }
436     if (d == 13) {
437         return 0xffffull;
438     }
439     return d;
440 }
441 
442 
443 /* save16 / restore16   ???? */
444 static uint64 encode_rt1_from_rt(uint64 d)
445 {
446     return d ? 31 : 30;
447 }
448 
449 
450 static const char *GPR(uint64 reg, Dis_info *info)
451 {
452     static const char *gpr_reg[32] = {
453         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
454         "a4",   "a5",   "a6",   "a7",   "r12",  "r13",  "r14",  "r15",
455         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
456         "r24",  "r25",  "k0",   "k1",   "gp",   "sp",   "fp",   "ra"
457     };
458 
459     if (reg < 32) {
460         return gpr_reg[reg];
461     }
462 
463     info->fprintf_func(info->stream, "Invalid GPR register index %" PRIu64,
464                        reg);
465     siglongjmp(info->buf, 1);
466 }
467 
468 
469 static char *save_restore_list(uint64 rt, uint64 count, uint64 gp,
470                                Dis_info *info)
471 {
472     char *reg_list[34];
473     reg_list[0] = (char *)"";
474 
475     assert(count <= 32);
476     for (uint64 counter = 0; counter != count; counter++) {
477         bool use_gp = gp && (counter == count - 1);
478         uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
479         /* glib usage below requires casting away const */
480         reg_list[counter + 1] = (char *)GPR(this_rt, info);
481     }
482     reg_list[count + 1] = NULL;
483 
484     return g_strjoinv(",", reg_list);
485 }
486 
487 
488 static const char *FPR(uint64 reg, Dis_info *info)
489 {
490     static const char *fpr_reg[32] = {
491         "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
492         "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
493         "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
494         "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
495     };
496 
497     if (reg < 32) {
498         return fpr_reg[reg];
499     }
500 
501     info->fprintf_func(info->stream, "Invalid FPR register index %" PRIu64,
502                        reg);
503     siglongjmp(info->buf, 1);
504 }
505 
506 
507 static const char *AC(uint64 reg, Dis_info *info)
508 {
509     static const char *ac_reg[4] = {
510         "ac0",  "ac1",  "ac2",  "ac3"
511     };
512 
513     if (reg < 4) {
514         return ac_reg[reg];
515     }
516 
517     info->fprintf_func(info->stream, "Invalid AC register index %" PRIu64,
518                        reg);
519     siglongjmp(info->buf, 1);
520 }
521 
522 
523 static char *ADDRESS(uint64 value, int instruction_size, Dis_info *info)
524 {
525     /* token for string replace */
526     img_address address = info->m_pc + value + instruction_size;
527     /* symbol replacement */
528     return to_string(address);
529 }
530 
531 
532 static uint64 extract_op_code_value(const uint16 *data, int size)
533 {
534     switch (size) {
535     case 16:
536         return data[0];
537     case 32:
538         return ((uint64)data[0] << 16) | data[1];
539     case 48:
540         return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
541     default:
542         return data[0];
543     }
544 }
545 
546 
547 /*
548  * Recurse through tables until the instruction is found then return
549  * the string and size
550  *
551  * inputs:
552  *      pointer to a word stream,
553  *      disassember table and size
554  * returns:
555  *      instruction size    - negative is error
556  *      disassembly string  - on error will constain error string
557  */
558 static int Disassemble(const uint16 *data, char **dis,
559                      TABLE_ENTRY_TYPE *type, const Pool *table,
560                      int table_size, Dis_info *info)
561 {
562     for (int i = 0; i < table_size; i++) {
563         uint64 op_code = extract_op_code_value(data,
564                              table[i].instructions_size);
565         if ((op_code & table[i].mask) == table[i].value) {
566             /* possible match */
567             conditional_function cond = table[i].condition;
568             if ((cond == NULL) || cond(op_code)) {
569                 if (table[i].type == pool) {
570                     return Disassemble(data, dis, type,
571                                        table[i].next_table,
572                                        table[i].next_table_size,
573                                        info);
574                 } else if ((table[i].type == instruction) ||
575                            (table[i].type == call_instruction) ||
576                            (table[i].type == branch_instruction) ||
577                            (table[i].type == return_instruction)) {
578                     disassembly_function dis_fn = table[i].disassembly;
579                     if (dis_fn == 0) {
580                         *dis = g_strdup(
581                             "disassembler failure - bad table entry");
582                         return -6;
583                     }
584                     *type = table[i].type;
585                     *dis = dis_fn(op_code, info);
586                     return table[i].instructions_size;
587                 } else {
588                     *dis = g_strdup("reserved instruction");
589                     return -2;
590                 }
591             }
592         }
593     }
594     *dis = g_strdup("failed to disassemble");
595     return -1;      /* failed to disassemble        */
596 }
597 
598 
599 static uint64 extract_code_18_to_0(uint64 instruction)
600 {
601     uint64 value = 0;
602     value |= extract_bits(instruction, 0, 19);
603     return value;
604 }
605 
606 
607 static uint64 extract_shift3_2_1_0(uint64 instruction)
608 {
609     uint64 value = 0;
610     value |= extract_bits(instruction, 0, 3);
611     return value;
612 }
613 
614 
615 static uint64 extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
616 {
617     uint64 value = 0;
618     value |= extract_bits(instruction, 3, 9) << 3;
619     return value;
620 }
621 
622 
623 static uint64 extract_count_3_2_1_0(uint64 instruction)
624 {
625     uint64 value = 0;
626     value |= extract_bits(instruction, 0, 4);
627     return value;
628 }
629 
630 
631 static uint64 extract_rtz3_9_8_7(uint64 instruction)
632 {
633     uint64 value = 0;
634     value |= extract_bits(instruction, 7, 3);
635     return value;
636 }
637 
638 
639 static uint64 extract_u_17_to_1__s1(uint64 instruction)
640 {
641     uint64 value = 0;
642     value |= extract_bits(instruction, 1, 17) << 1;
643     return value;
644 }
645 
646 
647 static int64 extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
648 {
649     int64 value = 0;
650     value |= extract_bits(instruction, 11, 10);
651     value = sign_extend(value, 9);
652     return value;
653 }
654 
655 
656 static int64 extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
657 {
658     int64 value = 0;
659     value |= extract_bits(instruction, 0, 1) << 11;
660     value |= extract_bits(instruction, 1, 10) << 1;
661     value = sign_extend(value, 11);
662     return value;
663 }
664 
665 
666 static uint64 extract_u_10(uint64 instruction)
667 {
668     uint64 value = 0;
669     value |= extract_bits(instruction, 10, 1);
670     return value;
671 }
672 
673 
674 static uint64 extract_rtz4_27_26_25_23_22_21(uint64 instruction)
675 {
676     uint64 value = 0;
677     value |= extract_bits(instruction, 21, 3);
678     value |= extract_bits(instruction, 25, 1) << 3;
679     return value;
680 }
681 
682 
683 static uint64 extract_sa_15_14_13_12_11(uint64 instruction)
684 {
685     uint64 value = 0;
686     value |= extract_bits(instruction, 11, 5);
687     return value;
688 }
689 
690 
691 static uint64 extract_shift_4_3_2_1_0(uint64 instruction)
692 {
693     uint64 value = 0;
694     value |= extract_bits(instruction, 0, 5);
695     return value;
696 }
697 
698 
699 static uint64 extract_shiftx_10_9_8_7__s1(uint64 instruction)
700 {
701     uint64 value = 0;
702     value |= extract_bits(instruction, 7, 4) << 1;
703     return value;
704 }
705 
706 
707 static uint64 extract_hint_25_24_23_22_21(uint64 instruction)
708 {
709     uint64 value = 0;
710     value |= extract_bits(instruction, 21, 5);
711     return value;
712 }
713 
714 
715 static uint64 extract_count3_14_13_12(uint64 instruction)
716 {
717     uint64 value = 0;
718     value |= extract_bits(instruction, 12, 3);
719     return value;
720 }
721 
722 
723 static int64 extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
724 {
725     int64 value = 0;
726     value |= extract_bits(instruction, 0, 1) << 31;
727     value |= extract_bits(instruction, 2, 10) << 21;
728     value |= extract_bits(instruction, 12, 9) << 12;
729     value = sign_extend(value, 31);
730     return value;
731 }
732 
733 
734 static int64 extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
735 {
736     int64 value = 0;
737     value |= extract_bits(instruction, 0, 1) << 7;
738     value |= extract_bits(instruction, 1, 6) << 1;
739     value = sign_extend(value, 7);
740     return value;
741 }
742 
743 
744 static uint64 extract_u2_10_9(uint64 instruction)
745 {
746     uint64 value = 0;
747     value |= extract_bits(instruction, 9, 2);
748     return value;
749 }
750 
751 
752 static uint64 extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
753 {
754     uint64 value = 0;
755     value |= extract_bits(instruction, 16, 10);
756     return value;
757 }
758 
759 
760 static uint64 extract_rs_20_19_18_17_16(uint64 instruction)
761 {
762     uint64 value = 0;
763     value |= extract_bits(instruction, 16, 5);
764     return value;
765 }
766 
767 
768 static uint64 extract_u_2_1__s1(uint64 instruction)
769 {
770     uint64 value = 0;
771     value |= extract_bits(instruction, 1, 2) << 1;
772     return value;
773 }
774 
775 
776 static uint64 extract_stripe_6(uint64 instruction)
777 {
778     uint64 value = 0;
779     value |= extract_bits(instruction, 6, 1);
780     return value;
781 }
782 
783 
784 static uint64 extract_ac_15_14(uint64 instruction)
785 {
786     uint64 value = 0;
787     value |= extract_bits(instruction, 14, 2);
788     return value;
789 }
790 
791 
792 static uint64 extract_shift_20_19_18_17_16(uint64 instruction)
793 {
794     uint64 value = 0;
795     value |= extract_bits(instruction, 16, 5);
796     return value;
797 }
798 
799 
800 static uint64 extract_rdl_25_24(uint64 instruction)
801 {
802     uint64 value = 0;
803     value |= extract_bits(instruction, 24, 1);
804     return value;
805 }
806 
807 
808 static int64 extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
809 {
810     int64 value = 0;
811     value |= extract_bits(instruction, 0, 1) << 10;
812     value |= extract_bits(instruction, 1, 9) << 1;
813     value = sign_extend(value, 10);
814     return value;
815 }
816 
817 
818 static uint64 extract_eu_6_5_4_3_2_1_0(uint64 instruction)
819 {
820     uint64 value = 0;
821     value |= extract_bits(instruction, 0, 7);
822     return value;
823 }
824 
825 
826 static uint64 extract_shift_5_4_3_2_1_0(uint64 instruction)
827 {
828     uint64 value = 0;
829     value |= extract_bits(instruction, 0, 6);
830     return value;
831 }
832 
833 
834 static uint64 extract_count_19_18_17_16(uint64 instruction)
835 {
836     uint64 value = 0;
837     value |= extract_bits(instruction, 16, 4);
838     return value;
839 }
840 
841 
842 static uint64 extract_code_2_1_0(uint64 instruction)
843 {
844     uint64 value = 0;
845     value |= extract_bits(instruction, 0, 3);
846     return value;
847 }
848 
849 
850 static uint64 extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
851 {
852     uint64 value = 0;
853     value |= extract_bits(instruction, 0, 12);
854     return value;
855 }
856 
857 
858 static uint64 extract_rs_4_3_2_1_0(uint64 instruction)
859 {
860     uint64 value = 0;
861     value |= extract_bits(instruction, 0, 5);
862     return value;
863 }
864 
865 
866 static uint64 extract_u_20_to_3__s3(uint64 instruction)
867 {
868     uint64 value = 0;
869     value |= extract_bits(instruction, 3, 18) << 3;
870     return value;
871 }
872 
873 
874 static uint64 extract_u_3_2_1_0__s2(uint64 instruction)
875 {
876     uint64 value = 0;
877     value |= extract_bits(instruction, 0, 4) << 2;
878     return value;
879 }
880 
881 
882 static uint64 extract_cofun_25_24_23(uint64 instruction)
883 {
884     uint64 value = 0;
885     value |= extract_bits(instruction, 3, 23);
886     return value;
887 }
888 
889 
890 static uint64 extract_u_2_1_0__s2(uint64 instruction)
891 {
892     uint64 value = 0;
893     value |= extract_bits(instruction, 0, 3) << 2;
894     return value;
895 }
896 
897 
898 static uint64 extract_rd3_3_2_1(uint64 instruction)
899 {
900     uint64 value = 0;
901     value |= extract_bits(instruction, 1, 3);
902     return value;
903 }
904 
905 
906 static uint64 extract_sa_15_14_13_12(uint64 instruction)
907 {
908     uint64 value = 0;
909     value |= extract_bits(instruction, 12, 4);
910     return value;
911 }
912 
913 
914 static uint64 extract_rt_25_24_23_22_21(uint64 instruction)
915 {
916     uint64 value = 0;
917     value |= extract_bits(instruction, 21, 5);
918     return value;
919 }
920 
921 
922 static uint64 extract_ru_7_6_5_4_3(uint64 instruction)
923 {
924     uint64 value = 0;
925     value |= extract_bits(instruction, 3, 5);
926     return value;
927 }
928 
929 
930 static uint64 extract_u_17_to_0(uint64 instruction)
931 {
932     uint64 value = 0;
933     value |= extract_bits(instruction, 0, 18);
934     return value;
935 }
936 
937 
938 static uint64 extract_rsz4_4_2_1_0(uint64 instruction)
939 {
940     uint64 value = 0;
941     value |= extract_bits(instruction, 0, 3);
942     value |= extract_bits(instruction, 4, 1) << 3;
943     return value;
944 }
945 
946 
947 static int64 extract_s__se21_0_20_to_1_s1(uint64 instruction)
948 {
949     int64 value = 0;
950     value |= extract_bits(instruction, 0, 1) << 21;
951     value |= extract_bits(instruction, 1, 20) << 1;
952     value = sign_extend(value, 21);
953     return value;
954 }
955 
956 
957 static uint64 extract_op_25_to_3(uint64 instruction)
958 {
959     uint64 value = 0;
960     value |= extract_bits(instruction, 3, 23);
961     return value;
962 }
963 
964 
965 static uint64 extract_rs4_4_2_1_0(uint64 instruction)
966 {
967     uint64 value = 0;
968     value |= extract_bits(instruction, 0, 3);
969     value |= extract_bits(instruction, 4, 1) << 3;
970     return value;
971 }
972 
973 
974 static uint64 extract_bit_23_22_21(uint64 instruction)
975 {
976     uint64 value = 0;
977     value |= extract_bits(instruction, 21, 3);
978     return value;
979 }
980 
981 
982 static uint64 extract_rt_41_40_39_38_37(uint64 instruction)
983 {
984     uint64 value = 0;
985     value |= extract_bits(instruction, 37, 5);
986     return value;
987 }
988 
989 
990 static int64 extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
991 {
992     int64 value = 0;
993     value |= extract_bits(instruction, 16, 6);
994     value = sign_extend(value, 5);
995     return value;
996 }
997 
998 
999 static uint64 extract_rd2_3_8(uint64 instruction)
1000 {
1001     uint64 value = 0;
1002     value |= extract_bits(instruction, 3, 1) << 1;
1003     value |= extract_bits(instruction, 8, 1);
1004     return value;
1005 }
1006 
1007 
1008 static uint64 extract_code_17_to_0(uint64 instruction)
1009 {
1010     uint64 value = 0;
1011     value |= extract_bits(instruction, 0, 18);
1012     return value;
1013 }
1014 
1015 
1016 static uint64 extract_size_20_19_18_17_16(uint64 instruction)
1017 {
1018     uint64 value = 0;
1019     value |= extract_bits(instruction, 16, 5);
1020     return value;
1021 }
1022 
1023 
1024 static int64 extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
1025 {
1026     int64 value = 0;
1027     value |= extract_bits(instruction, 2, 6) << 2;
1028     value |= extract_bits(instruction, 15, 1) << 8;
1029     value = sign_extend(value, 8);
1030     return value;
1031 }
1032 
1033 
1034 static uint64 extract_u_15_to_0(uint64 instruction)
1035 {
1036     uint64 value = 0;
1037     value |= extract_bits(instruction, 0, 16);
1038     return value;
1039 }
1040 
1041 
1042 static uint64 extract_fs_20_19_18_17_16(uint64 instruction)
1043 {
1044     uint64 value = 0;
1045     value |= extract_bits(instruction, 16, 5);
1046     return value;
1047 }
1048 
1049 
1050 static int64 extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
1051 {
1052     int64 value = 0;
1053     value |= extract_bits(instruction, 0, 8);
1054     value |= extract_bits(instruction, 15, 1) << 8;
1055     value = sign_extend(value, 8);
1056     return value;
1057 }
1058 
1059 
1060 static uint64 extract_stype_20_19_18_17_16(uint64 instruction)
1061 {
1062     uint64 value = 0;
1063     value |= extract_bits(instruction, 16, 5);
1064     return value;
1065 }
1066 
1067 
1068 static uint64 extract_rtl_11(uint64 instruction)
1069 {
1070     uint64 value = 0;
1071     value |= extract_bits(instruction, 9, 1);
1072     return value;
1073 }
1074 
1075 
1076 static uint64 extract_hs_20_19_18_17_16(uint64 instruction)
1077 {
1078     uint64 value = 0;
1079     value |= extract_bits(instruction, 16, 5);
1080     return value;
1081 }
1082 
1083 
1084 static uint64 extract_sel_13_12_11(uint64 instruction)
1085 {
1086     uint64 value = 0;
1087     value |= extract_bits(instruction, 11, 3);
1088     return value;
1089 }
1090 
1091 
1092 static uint64 extract_lsb_4_3_2_1_0(uint64 instruction)
1093 {
1094     uint64 value = 0;
1095     value |= extract_bits(instruction, 0, 5);
1096     return value;
1097 }
1098 
1099 
1100 static uint64 extract_gp_2(uint64 instruction)
1101 {
1102     uint64 value = 0;
1103     value |= extract_bits(instruction, 2, 1);
1104     return value;
1105 }
1106 
1107 
1108 static uint64 extract_rt3_9_8_7(uint64 instruction)
1109 {
1110     uint64 value = 0;
1111     value |= extract_bits(instruction, 7, 3);
1112     return value;
1113 }
1114 
1115 
1116 static uint64 extract_ft_25_24_23_22_21(uint64 instruction)
1117 {
1118     uint64 value = 0;
1119     value |= extract_bits(instruction, 21, 5);
1120     return value;
1121 }
1122 
1123 
1124 static uint64 extract_u_17_16_15_14_13_12_11(uint64 instruction)
1125 {
1126     uint64 value = 0;
1127     value |= extract_bits(instruction, 11, 7);
1128     return value;
1129 }
1130 
1131 
1132 static uint64 extract_cs_20_19_18_17_16(uint64 instruction)
1133 {
1134     uint64 value = 0;
1135     value |= extract_bits(instruction, 16, 5);
1136     return value;
1137 }
1138 
1139 
1140 static uint64 extract_rt4_9_7_6_5(uint64 instruction)
1141 {
1142     uint64 value = 0;
1143     value |= extract_bits(instruction, 5, 3);
1144     value |= extract_bits(instruction, 9, 1) << 3;
1145     return value;
1146 }
1147 
1148 
1149 static uint64 extract_msbt_10_9_8_7_6(uint64 instruction)
1150 {
1151     uint64 value = 0;
1152     value |= extract_bits(instruction, 6, 5);
1153     return value;
1154 }
1155 
1156 
1157 static uint64 extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1158 {
1159     uint64 value = 0;
1160     value |= extract_bits(instruction, 0, 6) << 2;
1161     return value;
1162 }
1163 
1164 
1165 static uint64 extract_sa_15_14_13(uint64 instruction)
1166 {
1167     uint64 value = 0;
1168     value |= extract_bits(instruction, 13, 3);
1169     return value;
1170 }
1171 
1172 
1173 static int64 extract_s__se14_0_13_to_1_s1(uint64 instruction)
1174 {
1175     int64 value = 0;
1176     value |= extract_bits(instruction, 0, 1) << 14;
1177     value |= extract_bits(instruction, 1, 13) << 1;
1178     value = sign_extend(value, 14);
1179     return value;
1180 }
1181 
1182 
1183 static uint64 extract_rs3_6_5_4(uint64 instruction)
1184 {
1185     uint64 value = 0;
1186     value |= extract_bits(instruction, 4, 3);
1187     return value;
1188 }
1189 
1190 
1191 static uint64 extract_u_31_to_0__s32(uint64 instruction)
1192 {
1193     uint64 value = 0;
1194     value |= extract_bits(instruction, 0, 32) << 32;
1195     return value;
1196 }
1197 
1198 
1199 static uint64 extract_shift_10_9_8_7_6(uint64 instruction)
1200 {
1201     uint64 value = 0;
1202     value |= extract_bits(instruction, 6, 5);
1203     return value;
1204 }
1205 
1206 
1207 static uint64 extract_cs_25_24_23_22_21(uint64 instruction)
1208 {
1209     uint64 value = 0;
1210     value |= extract_bits(instruction, 21, 5);
1211     return value;
1212 }
1213 
1214 
1215 static uint64 extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1216 {
1217     uint64 value = 0;
1218     value |= extract_bits(instruction, 6, 6);
1219     return value;
1220 }
1221 
1222 
1223 static uint64 extract_rt_9_8_7_6_5(uint64 instruction)
1224 {
1225     uint64 value = 0;
1226     value |= extract_bits(instruction, 5, 5);
1227     return value;
1228 }
1229 
1230 
1231 static uint64 extract_op_25_24_23_22_21(uint64 instruction)
1232 {
1233     uint64 value = 0;
1234     value |= extract_bits(instruction, 21, 5);
1235     return value;
1236 }
1237 
1238 
1239 static uint64 extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1240 {
1241     uint64 value = 0;
1242     value |= extract_bits(instruction, 0, 7) << 2;
1243     return value;
1244 }
1245 
1246 
1247 static uint64 extract_bit_16_15_14_13_12_11(uint64 instruction)
1248 {
1249     uint64 value = 0;
1250     value |= extract_bits(instruction, 11, 6);
1251     return value;
1252 }
1253 
1254 
1255 static uint64 extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1256 {
1257     uint64 value = 0;
1258     value |= extract_bits(instruction, 14, 7);
1259     return value;
1260 }
1261 
1262 
1263 static uint64 extract_eu_3_2_1_0(uint64 instruction)
1264 {
1265     uint64 value = 0;
1266     value |= extract_bits(instruction, 0, 4);
1267     return value;
1268 }
1269 
1270 
1271 static uint64 extract_u_7_6_5_4__s4(uint64 instruction)
1272 {
1273     uint64 value = 0;
1274     value |= extract_bits(instruction, 4, 4) << 4;
1275     return value;
1276 }
1277 
1278 
1279 static int64 extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1280 {
1281     int64 value = 0;
1282     value |= extract_bits(instruction, 3, 5) << 3;
1283     value |= extract_bits(instruction, 15, 1) << 8;
1284     value = sign_extend(value, 8);
1285     return value;
1286 }
1287 
1288 
1289 static uint64 extract_ft_15_14_13_12_11(uint64 instruction)
1290 {
1291     uint64 value = 0;
1292     value |= extract_bits(instruction, 11, 5);
1293     return value;
1294 }
1295 
1296 
1297 static int64 extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1298 {
1299     int64 value = 0;
1300     value |= extract_bits(instruction, 0, 16) << 16;
1301     value |= extract_bits(instruction, 16, 16);
1302     value = sign_extend(value, 31);
1303     return value;
1304 }
1305 
1306 
1307 static uint64 extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1308 {
1309     uint64 value = 0;
1310     value |= extract_bits(instruction, 13, 8);
1311     return value;
1312 }
1313 
1314 
1315 static uint64 extract_u_17_to_2__s2(uint64 instruction)
1316 {
1317     uint64 value = 0;
1318     value |= extract_bits(instruction, 2, 16) << 2;
1319     return value;
1320 }
1321 
1322 
1323 static uint64 extract_rd_15_14_13_12_11(uint64 instruction)
1324 {
1325     uint64 value = 0;
1326     value |= extract_bits(instruction, 11, 5);
1327     return value;
1328 }
1329 
1330 
1331 static uint64 extract_c0s_20_19_18_17_16(uint64 instruction)
1332 {
1333     uint64 value = 0;
1334     value |= extract_bits(instruction, 16, 5);
1335     return value;
1336 }
1337 
1338 
1339 static uint64 extract_code_1_0(uint64 instruction)
1340 {
1341     uint64 value = 0;
1342     value |= extract_bits(instruction, 0, 2);
1343     return value;
1344 }
1345 
1346 
1347 static int64 extract_s__se25_0_24_to_1_s1(uint64 instruction)
1348 {
1349     int64 value = 0;
1350     value |= extract_bits(instruction, 0, 1) << 25;
1351     value |= extract_bits(instruction, 1, 24) << 1;
1352     value = sign_extend(value, 25);
1353     return value;
1354 }
1355 
1356 
1357 static uint64 extract_u_1_0(uint64 instruction)
1358 {
1359     uint64 value = 0;
1360     value |= extract_bits(instruction, 0, 2);
1361     return value;
1362 }
1363 
1364 
1365 static uint64 extract_u_3_8__s2(uint64 instruction)
1366 {
1367     uint64 value = 0;
1368     value |= extract_bits(instruction, 3, 1) << 3;
1369     value |= extract_bits(instruction, 8, 1) << 2;
1370     return value;
1371 }
1372 
1373 
1374 static uint64 extract_fd_15_14_13_12_11(uint64 instruction)
1375 {
1376     uint64 value = 0;
1377     value |= extract_bits(instruction, 11, 5);
1378     return value;
1379 }
1380 
1381 
1382 static uint64 extract_u_4_3_2_1_0__s2(uint64 instruction)
1383 {
1384     uint64 value = 0;
1385     value |= extract_bits(instruction, 0, 5) << 2;
1386     return value;
1387 }
1388 
1389 
1390 static uint64 extract_rtz4_9_7_6_5(uint64 instruction)
1391 {
1392     uint64 value = 0;
1393     value |= extract_bits(instruction, 5, 3);
1394     value |= extract_bits(instruction, 9, 1) << 3;
1395     return value;
1396 }
1397 
1398 
1399 static uint64 extract_sel_15_14_13_12_11(uint64 instruction)
1400 {
1401     uint64 value = 0;
1402     value |= extract_bits(instruction, 11, 5);
1403     return value;
1404 }
1405 
1406 
1407 static uint64 extract_ct_25_24_23_22_21(uint64 instruction)
1408 {
1409     uint64 value = 0;
1410     value |= extract_bits(instruction, 21, 5);
1411     return value;
1412 }
1413 
1414 
1415 static uint64 extract_u_20_to_2__s2(uint64 instruction)
1416 {
1417     uint64 value = 0;
1418     value |= extract_bits(instruction, 2, 19) << 2;
1419     return value;
1420 }
1421 
1422 
1423 static int64 extract_s__se3_4_2_1_0(uint64 instruction)
1424 {
1425     int64 value = 0;
1426     value |= extract_bits(instruction, 0, 3);
1427     value |= extract_bits(instruction, 4, 1) << 3;
1428     value = sign_extend(value, 3);
1429     return value;
1430 }
1431 
1432 
1433 static uint64 extract_u_3_2_1_0__s1(uint64 instruction)
1434 {
1435     uint64 value = 0;
1436     value |= extract_bits(instruction, 0, 4) << 1;
1437     return value;
1438 }
1439 
1440 
1441 
1442 static bool ADDIU_32__cond(uint64 instruction)
1443 {
1444     uint64 rt = extract_rt_25_24_23_22_21(instruction);
1445     return rt != 0;
1446 }
1447 
1448 
1449 static bool ADDIU_RS5__cond(uint64 instruction)
1450 {
1451     uint64 rt = extract_rt_9_8_7_6_5(instruction);
1452     return rt != 0;
1453 }
1454 
1455 
1456 static bool BALRSC_cond(uint64 instruction)
1457 {
1458     uint64 rt = extract_rt_25_24_23_22_21(instruction);
1459     return rt != 0;
1460 }
1461 
1462 
1463 static bool BEQC_16__cond(uint64 instruction)
1464 {
1465     uint64 rs3 = extract_rs3_6_5_4(instruction);
1466     uint64 rt3 = extract_rt3_9_8_7(instruction);
1467     uint64 u = extract_u_3_2_1_0__s1(instruction);
1468     return rs3 < rt3 && u != 0;
1469 }
1470 
1471 
1472 static bool BNEC_16__cond(uint64 instruction)
1473 {
1474     uint64 rs3 = extract_rs3_6_5_4(instruction);
1475     uint64 rt3 = extract_rt3_9_8_7(instruction);
1476     uint64 u = extract_u_3_2_1_0__s1(instruction);
1477     return rs3 >= rt3 && u != 0;
1478 }
1479 
1480 
1481 static bool MOVE_cond(uint64 instruction)
1482 {
1483     uint64 rt = extract_rt_9_8_7_6_5(instruction);
1484     return rt != 0;
1485 }
1486 
1487 
1488 static bool P16_BR1_cond(uint64 instruction)
1489 {
1490     uint64 u = extract_u_3_2_1_0__s1(instruction);
1491     return u != 0;
1492 }
1493 
1494 
1495 static bool PREF_S9__cond(uint64 instruction)
1496 {
1497     uint64 hint = extract_hint_25_24_23_22_21(instruction);
1498     return hint != 31;
1499 }
1500 
1501 
1502 static bool PREFE_cond(uint64 instruction)
1503 {
1504     uint64 hint = extract_hint_25_24_23_22_21(instruction);
1505     return hint != 31;
1506 }
1507 
1508 
1509 static bool SLTU_cond(uint64 instruction)
1510 {
1511     uint64 rd = extract_rd_15_14_13_12_11(instruction);
1512     return rd != 0;
1513 }
1514 
1515 
1516 
1517 /*
1518  * ABS.D fd, fs - Floating Point Absolute Value
1519  *
1520  *   3         2         1
1521  *  10987654321098765432109876543210
1522  *  010001     00000          000101
1523  *    fmt -----
1524  *               fs -----
1525  *                    fd -----
1526  */
1527 static char *ABS_D(uint64 instruction, Dis_info *info)
1528 {
1529     uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1530     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1531 
1532     const char *fs = FPR(fs_value, info);
1533     const char *fd = FPR(fd_value, info);
1534 
1535     return img_format("ABS.D %s, %s", fd, fs);
1536 }
1537 
1538 
1539 /*
1540  * ABS.S fd, fs - Floating Point Absolute Value
1541  *
1542  *   3         2         1
1543  *  10987654321098765432109876543210
1544  *  010001     00000          000101
1545  *    fmt -----
1546  *               fd -----
1547  *                    fs -----
1548  */
1549 static char *ABS_S(uint64 instruction, Dis_info *info)
1550 {
1551     uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1552     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1553 
1554     const char *fs = FPR(fs_value, info);
1555     const char *fd = FPR(fd_value, info);
1556 
1557     return img_format("ABS.S %s, %s", fd, fs);
1558 }
1559 
1560 
1561 /*
1562  * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1563  *         with 16-bit saturation
1564  *
1565  *   3         2         1
1566  *  10987654321098765432109876543210
1567  *  001000          0001000100111111
1568  *     rt -----
1569  *          rs -----
1570  */
1571 static char *ABSQ_S_PH(uint64 instruction, Dis_info *info)
1572 {
1573     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1574     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1575 
1576     const char *rt = GPR(rt_value, info);
1577     const char *rs = GPR(rs_value, info);
1578 
1579     return img_format("ABSQ_S.PH %s, %s", rt, rs);
1580 }
1581 
1582 
1583 /*
1584  * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1585  *         with 8-bit saturation
1586  *
1587  *   3         2         1
1588  *  10987654321098765432109876543210
1589  *  001000          0000000100111111
1590  *     rt -----
1591  *          rs -----
1592  */
1593 static char *ABSQ_S_QB(uint64 instruction, Dis_info *info)
1594 {
1595     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1596     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1597 
1598     const char *rt = GPR(rt_value, info);
1599     const char *rs = GPR(rs_value, info);
1600 
1601     return img_format("ABSQ_S.QB %s, %s", rt, rs);
1602 }
1603 
1604 
1605 /*
1606  * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1607  *         saturation
1608  *
1609  *   3         2         1
1610  *  10987654321098765432109876543210
1611  *  001000          0010000100111111
1612  *     rt -----
1613  *          rs -----
1614  */
1615 static char *ABSQ_S_W(uint64 instruction, Dis_info *info)
1616 {
1617     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1618     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1619 
1620     const char *rt = GPR(rt_value, info);
1621     const char *rs = GPR(rs_value, info);
1622 
1623     return img_format("ABSQ_S.W %s, %s", rt, rs);
1624 }
1625 
1626 
1627 /*
1628  *
1629  *
1630  *   3         2         1
1631  *  10987654321098765432109876543210
1632  *  001000          0010000100111111
1633  *     rt -----
1634  *          rs -----
1635  */
1636 static char *ACLR(uint64 instruction, Dis_info *info)
1637 {
1638     uint64 bit_value = extract_bit_23_22_21(instruction);
1639     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1640     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1641 
1642     const char *rs = GPR(rs_value, info);
1643 
1644     return img_format("ACLR 0x%" PRIx64 ", %" PRId64 "(%s)",
1645                       bit_value, s_value, rs);
1646 }
1647 
1648 
1649 /*
1650  *
1651  *
1652  *   3         2         1
1653  *  10987654321098765432109876543210
1654  *  001000          0010000100111111
1655  *     rt -----
1656  *          rs -----
1657  */
1658 static char *ADD(uint64 instruction, Dis_info *info)
1659 {
1660     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1661     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1662     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1663 
1664     const char *rd = GPR(rd_value, info);
1665     const char *rs = GPR(rs_value, info);
1666     const char *rt = GPR(rt_value, info);
1667 
1668     return img_format("ADD %s, %s, %s", rd, rs, rt);
1669 }
1670 
1671 
1672 /*
1673  * ADD.D fd, fs, ft - Floating Point Add
1674  *
1675  *   3         2         1
1676  *  10987654321098765432109876543210
1677  *  010001                    000101
1678  *    fmt -----
1679  *          ft -----
1680  *               fs -----
1681  *                    fd -----
1682  */
1683 static char *ADD_D(uint64 instruction, Dis_info *info)
1684 {
1685     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1686     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1687     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1688 
1689     const char *ft = FPR(ft_value, info);
1690     const char *fs = FPR(fs_value, info);
1691     const char *fd = FPR(fd_value, info);
1692 
1693     return img_format("ADD.D %s, %s, %s", fd, fs, ft);
1694 }
1695 
1696 
1697 /*
1698  * ADD.S fd, fs, ft - Floating Point Add
1699  *
1700  *   3         2         1
1701  *  10987654321098765432109876543210
1702  *  010001                    000101
1703  *    fmt -----
1704  *          ft -----
1705  *               fs -----
1706  *                    fd -----
1707  */
1708 static char *ADD_S(uint64 instruction, Dis_info *info)
1709 {
1710     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1711     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1712     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1713 
1714     const char *ft = FPR(ft_value, info);
1715     const char *fs = FPR(fs_value, info);
1716     const char *fd = FPR(fd_value, info);
1717 
1718     return img_format("ADD.S %s, %s, %s", fd, fs, ft);
1719 }
1720 
1721 
1722 /*
1723  *
1724  *
1725  *   3         2         1
1726  *  10987654321098765432109876543210
1727  *  001000          0010000100111111
1728  *     rt -----
1729  *          rs -----
1730  */
1731 static char *ADDIU_32_(uint64 instruction, Dis_info *info)
1732 {
1733     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1734     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1735     uint64 u_value = extract_u_15_to_0(instruction);
1736 
1737     const char *rt = GPR(rt_value, info);
1738     const char *rs = GPR(rs_value, info);
1739 
1740     return img_format("ADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
1741 }
1742 
1743 
1744 /*
1745  *
1746  *
1747  *   3         2         1
1748  *  10987654321098765432109876543210
1749  *  001000          0010000100111111
1750  *     rt -----
1751  *          rs -----
1752  */
1753 static char *ADDIU_48_(uint64 instruction, Dis_info *info)
1754 {
1755     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1756     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1757 
1758     const char *rt = GPR(rt_value, info);
1759 
1760     return img_format("ADDIU %s, %" PRId64, rt, s_value);
1761 }
1762 
1763 
1764 /*
1765  *
1766  *
1767  *   3         2         1
1768  *  10987654321098765432109876543210
1769  *  001000          0010000100111111
1770  *     rt -----
1771  *          rs -----
1772  */
1773 static char *ADDIU_GP48_(uint64 instruction, Dis_info *info)
1774 {
1775     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1776     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1777 
1778     const char *rt = GPR(rt_value, info);
1779 
1780     return img_format("ADDIU %s, $%d, %" PRId64, rt, 28, s_value);
1781 }
1782 
1783 
1784 /*
1785  *
1786  *
1787  *   3         2         1
1788  *  10987654321098765432109876543210
1789  *  001000          0010000100111111
1790  *     rt -----
1791  *          rs -----
1792  */
1793 static char *ADDIU_GP_B_(uint64 instruction, Dis_info *info)
1794 {
1795     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1796     uint64 u_value = extract_u_17_to_0(instruction);
1797 
1798     const char *rt = GPR(rt_value, info);
1799 
1800     return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1801 }
1802 
1803 
1804 /*
1805  *
1806  *
1807  *   3         2         1
1808  *  10987654321098765432109876543210
1809  *  001000          0010000100111111
1810  *     rt -----
1811  *          rs -----
1812  */
1813 static char *ADDIU_GP_W_(uint64 instruction, Dis_info *info)
1814 {
1815     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1816     uint64 u_value = extract_u_20_to_2__s2(instruction);
1817 
1818     const char *rt = GPR(rt_value, info);
1819 
1820     return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1821 }
1822 
1823 
1824 /*
1825  *
1826  *
1827  *   3         2         1
1828  *  10987654321098765432109876543210
1829  *  001000          0010000100111111
1830  *     rt -----
1831  *          rs -----
1832  */
1833 static char *ADDIU_NEG_(uint64 instruction, Dis_info *info)
1834 {
1835     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1836     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1837     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
1838 
1839     const char *rt = GPR(rt_value, info);
1840     const char *rs = GPR(rs_value, info);
1841     int64 u = neg_copy(u_value);
1842 
1843     return img_format("ADDIU %s, %s, %" PRId64, rt, rs, u);
1844 }
1845 
1846 
1847 /*
1848  *
1849  *
1850  *   3         2         1
1851  *  10987654321098765432109876543210
1852  *  001000          0010000100111111
1853  *     rt -----
1854  *          rs -----
1855  */
1856 static char *ADDIU_R1_SP_(uint64 instruction, Dis_info *info)
1857 {
1858     uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
1859     uint64 rt3_value = extract_rt3_9_8_7(instruction);
1860 
1861     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1862 
1863     return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt3, 29, u_value);
1864 }
1865 
1866 
1867 /*
1868  *
1869  *
1870  *   3         2         1
1871  *  10987654321098765432109876543210
1872  *  001000          0010000100111111
1873  *     rt -----
1874  *          rs -----
1875  */
1876 static char *ADDIU_R2_(uint64 instruction, Dis_info *info)
1877 {
1878     uint64 rt3_value = extract_rt3_9_8_7(instruction);
1879     uint64 rs3_value = extract_rs3_6_5_4(instruction);
1880     uint64 u_value = extract_u_2_1_0__s2(instruction);
1881 
1882     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1883     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
1884 
1885     return img_format("ADDIU %s, %s, 0x%" PRIx64, rt3, rs3, u_value);
1886 }
1887 
1888 
1889 /*
1890  * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
1891  *
1892  *  5432109876543210
1893  *  100100      1
1894  *     rt -----
1895  *           s - ---
1896  */
1897 static char *ADDIU_RS5_(uint64 instruction, Dis_info *info)
1898 {
1899     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
1900     int64 s_value = extract_s__se3_4_2_1_0(instruction);
1901 
1902     const char *rt = GPR(rt_value, info);
1903 
1904     return img_format("ADDIU %s, %" PRId64, rt, s_value);
1905 }
1906 
1907 
1908 /*
1909  *
1910  *
1911  *   3         2         1
1912  *  10987654321098765432109876543210
1913  *  001000               x1110000101
1914  *     rt -----
1915  *          rs -----
1916  *               rd -----
1917  */
1918 static char *ADDIUPC_32_(uint64 instruction, Dis_info *info)
1919 {
1920     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1921     int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
1922 
1923     const char *rt = GPR(rt_value, info);
1924     g_autofree char *s = ADDRESS(s_value, 4, info);
1925 
1926     return img_format("ADDIUPC %s, %s", rt, s);
1927 }
1928 
1929 
1930 /*
1931  *
1932  *
1933  *   3         2         1
1934  *  10987654321098765432109876543210
1935  *  001000               x1110000101
1936  *     rt -----
1937  *          rs -----
1938  *               rd -----
1939  */
1940 static char *ADDIUPC_48_(uint64 instruction, Dis_info *info)
1941 {
1942     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1943     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1944 
1945     const char *rt = GPR(rt_value, info);
1946     g_autofree char *s = ADDRESS(s_value, 6, info);
1947 
1948     return img_format("ADDIUPC %s, %s", rt, s);
1949 }
1950 
1951 
1952 /*
1953  * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
1954  *
1955  *   3         2         1
1956  *  10987654321098765432109876543210
1957  *  001000               00000001101
1958  *     rt -----
1959  *          rs -----
1960  *               rd -----
1961  */
1962 static char *ADDQ_PH(uint64 instruction, Dis_info *info)
1963 {
1964     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1965     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1966     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1967 
1968     const char *rd = GPR(rd_value, info);
1969     const char *rs = GPR(rs_value, info);
1970     const char *rt = GPR(rt_value, info);
1971 
1972     return img_format("ADDQ.PH %s, %s, %s", rd, rs, rt);
1973 }
1974 
1975 
1976 /*
1977  * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
1978  *         saturation
1979  *
1980  *   3         2         1
1981  *  10987654321098765432109876543210
1982  *  001000               10000001101
1983  *     rt -----
1984  *          rs -----
1985  *               rd -----
1986  */
1987 static char *ADDQ_S_PH(uint64 instruction, Dis_info *info)
1988 {
1989     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1990     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1991     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1992 
1993     const char *rd = GPR(rd_value, info);
1994     const char *rs = GPR(rs_value, info);
1995     const char *rt = GPR(rt_value, info);
1996 
1997     return img_format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
1998 }
1999 
2000 
2001 /*
2002  * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
2003  *
2004  *   3         2         1
2005  *  10987654321098765432109876543210
2006  *  001000               x1100000101
2007  *     rt -----
2008  *          rs -----
2009  *               rd -----
2010  */
2011 static char *ADDQ_S_W(uint64 instruction, Dis_info *info)
2012 {
2013     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2014     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2015     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2016 
2017     const char *rd = GPR(rd_value, info);
2018     const char *rs = GPR(rs_value, info);
2019     const char *rt = GPR(rt_value, info);
2020 
2021     return img_format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
2022 }
2023 
2024 
2025 /*
2026  * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2027  *         right to halve results
2028  *
2029  *   3         2         1
2030  *  10987654321098765432109876543210
2031  *  001000               00001001101
2032  *     rt -----
2033  *          rs -----
2034  *               rd -----
2035  */
2036 static char *ADDQH_PH(uint64 instruction, Dis_info *info)
2037 {
2038     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2039     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2040     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2041 
2042     const char *rd = GPR(rd_value, info);
2043     const char *rs = GPR(rs_value, info);
2044     const char *rt = GPR(rt_value, info);
2045 
2046     return img_format("ADDQH.PH %s, %s, %s", rd, rs, rt);
2047 }
2048 
2049 
2050 /*
2051  * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2052  *         right to halve results with rounding
2053  *
2054  *   3         2         1
2055  *  10987654321098765432109876543210
2056  *  001000               10001001101
2057  *     rt -----
2058  *          rs -----
2059  *               rd -----
2060  */
2061 static char *ADDQH_R_PH(uint64 instruction, Dis_info *info)
2062 {
2063     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2064     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2065     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2066 
2067     const char *rd = GPR(rd_value, info);
2068     const char *rs = GPR(rs_value, info);
2069     const char *rt = GPR(rt_value, info);
2070 
2071     return img_format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
2072 }
2073 
2074 
2075 /*
2076  * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2077  *         results with rounding
2078  *
2079  *   3         2         1
2080  *  10987654321098765432109876543210
2081  *  001000               00010001101
2082  *     rt -----
2083  *          rs -----
2084  *               rd -----
2085  */
2086 static char *ADDQH_R_W(uint64 instruction, Dis_info *info)
2087 {
2088     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2089     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2090     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2091 
2092     const char *rd = GPR(rd_value, info);
2093     const char *rs = GPR(rs_value, info);
2094     const char *rt = GPR(rt_value, info);
2095 
2096     return img_format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2097 }
2098 
2099 
2100 /*
2101  * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2102  *         results
2103  *
2104  *   3         2         1
2105  *  10987654321098765432109876543210
2106  *  001000               10010001101
2107  *     rt -----
2108  *          rs -----
2109  *               rd -----
2110  */
2111 static char *ADDQH_W(uint64 instruction, Dis_info *info)
2112 {
2113     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2114     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2115     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2116 
2117     const char *rd = GPR(rd_value, info);
2118     const char *rs = GPR(rs_value, info);
2119     const char *rt = GPR(rt_value, info);
2120 
2121     return img_format("ADDQH.W %s, %s, %s", rd, rs, rt);
2122 }
2123 
2124 
2125 /*
2126  * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2127  *
2128  *   3         2         1
2129  *  10987654321098765432109876543210
2130  *  001000               x1110000101
2131  *     rt -----
2132  *          rs -----
2133  *               rd -----
2134  */
2135 static char *ADDSC(uint64 instruction, Dis_info *info)
2136 {
2137     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2138     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2139     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2140 
2141     const char *rd = GPR(rd_value, info);
2142     const char *rs = GPR(rs_value, info);
2143     const char *rt = GPR(rt_value, info);
2144 
2145     return img_format("ADDSC %s, %s, %s", rd, rs, rt);
2146 }
2147 
2148 
2149 /*
2150  * ADDU[16] rd3, rs3, rt3 -
2151  *
2152  *  5432109876543210
2153  *  101100         0
2154  *    rt3 ---
2155  *       rs3 ---
2156  *          rd3 ---
2157  */
2158 static char *ADDU_16_(uint64 instruction, Dis_info *info)
2159 {
2160     uint64 rt3_value = extract_rt3_9_8_7(instruction);
2161     uint64 rs3_value = extract_rs3_6_5_4(instruction);
2162     uint64 rd3_value = extract_rd3_3_2_1(instruction);
2163 
2164     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2165     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2166     const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
2167 
2168     return img_format("ADDU %s, %s, %s", rd3, rs3, rt3);
2169 }
2170 
2171 
2172 /*
2173  *
2174  *
2175  *   3         2         1
2176  *  10987654321098765432109876543210
2177  *  001000               x1110000101
2178  *     rt -----
2179  *          rs -----
2180  *               rd -----
2181  */
2182 static char *ADDU_32_(uint64 instruction, Dis_info *info)
2183 {
2184     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2185     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2186     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2187 
2188     const char *rd = GPR(rd_value, info);
2189     const char *rs = GPR(rs_value, info);
2190     const char *rt = GPR(rt_value, info);
2191 
2192     return img_format("ADDU %s, %s, %s", rd, rs, rt);
2193 }
2194 
2195 
2196 /*
2197  *
2198  *
2199  *   3         2         1
2200  *  10987654321098765432109876543210
2201  *  001000               x1110000101
2202  *     rt -----
2203  *          rs -----
2204  *               rd -----
2205  */
2206 static char *ADDU_4X4_(uint64 instruction, Dis_info *info)
2207 {
2208     uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2209     uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2210 
2211     const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
2212     const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
2213 
2214     return img_format("ADDU %s, %s", rs4, rt4);
2215 }
2216 
2217 
2218 /*
2219  * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2220  *
2221  *   3         2         1
2222  *  10987654321098765432109876543210
2223  *  001000               00100001101
2224  *     rt -----
2225  *          rs -----
2226  *               rd -----
2227  */
2228 static char *ADDU_PH(uint64 instruction, Dis_info *info)
2229 {
2230     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2231     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2232     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2233 
2234     const char *rd = GPR(rd_value, info);
2235     const char *rs = GPR(rs_value, info);
2236     const char *rt = GPR(rt_value, info);
2237 
2238     return img_format("ADDU.PH %s, %s, %s", rd, rs, rt);
2239 }
2240 
2241 
2242 /*
2243  * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2244  *
2245  *   3         2         1
2246  *  10987654321098765432109876543210
2247  *  001000               00011001101
2248  *     rt -----
2249  *          rs -----
2250  *               rd -----
2251  */
2252 static char *ADDU_QB(uint64 instruction, Dis_info *info)
2253 {
2254     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2255     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2256     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2257 
2258     const char *rd = GPR(rd_value, info);
2259     const char *rs = GPR(rs_value, info);
2260     const char *rt = GPR(rt_value, info);
2261 
2262     return img_format("ADDU.QB %s, %s, %s", rd, rs, rt);
2263 }
2264 
2265 
2266 /*
2267  * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2268  *         saturation
2269  *
2270  *   3         2         1
2271  *  10987654321098765432109876543210
2272  *  001000               10100001101
2273  *     rt -----
2274  *          rs -----
2275  *               rd -----
2276  */
2277 static char *ADDU_S_PH(uint64 instruction, Dis_info *info)
2278 {
2279     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2280     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2281     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2282 
2283     const char *rd = GPR(rd_value, info);
2284     const char *rs = GPR(rs_value, info);
2285     const char *rt = GPR(rt_value, info);
2286 
2287     return img_format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2288 }
2289 
2290 
2291 /*
2292  * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2293  *
2294  *   3         2         1
2295  *  10987654321098765432109876543210
2296  *  001000               10011001101
2297  *     rt -----
2298  *          rs -----
2299  *               rd -----
2300  */
2301 static char *ADDU_S_QB(uint64 instruction, Dis_info *info)
2302 {
2303     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2304     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2305     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2306 
2307     const char *rd = GPR(rd_value, info);
2308     const char *rs = GPR(rs_value, info);
2309     const char *rt = GPR(rt_value, info);
2310 
2311     return img_format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2312 }
2313 
2314 
2315 /*
2316  * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2317  *                       to Halve Results
2318  *
2319  *   3         2         1
2320  *  10987654321098765432109876543210
2321  *  001000               00101001101
2322  *     rt -----
2323  *          rs -----
2324  *               rd -----
2325  */
2326 static char *ADDUH_QB(uint64 instruction, Dis_info *info)
2327 {
2328     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2329     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2330     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2331 
2332     const char *rd = GPR(rd_value, info);
2333     const char *rs = GPR(rs_value, info);
2334     const char *rt = GPR(rt_value, info);
2335 
2336     return img_format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2337 }
2338 
2339 
2340 /*
2341  * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2342  *                         to Halve Results
2343  *
2344  *   3         2         1
2345  *  10987654321098765432109876543210
2346  *  001000               10101001101
2347  *     rt -----
2348  *          rs -----
2349  *               rd -----
2350  */
2351 static char *ADDUH_R_QB(uint64 instruction, Dis_info *info)
2352 {
2353     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2354     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2355     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2356 
2357     const char *rd = GPR(rd_value, info);
2358     const char *rs = GPR(rs_value, info);
2359     const char *rt = GPR(rt_value, info);
2360 
2361     return img_format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2362 }
2363 
2364 /*
2365  * ADDWC rd, rt, rs - Add Word with Carry Bit
2366  *
2367  *   3         2         1
2368  *  10987654321098765432109876543210
2369  *  001000               x1111000101
2370  *     rt -----
2371  *          rs -----
2372  *               rd -----
2373  */
2374 static char *ADDWC(uint64 instruction, Dis_info *info)
2375 {
2376     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2377     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2378     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2379 
2380     const char *rd = GPR(rd_value, info);
2381     const char *rs = GPR(rs_value, info);
2382     const char *rt = GPR(rt_value, info);
2383 
2384     return img_format("ADDWC %s, %s, %s", rd, rs, rt);
2385 }
2386 
2387 
2388 /*
2389  *
2390  *
2391  *   3         2         1
2392  *  10987654321098765432109876543210
2393  *  001000               x1110000101
2394  *     rt -----
2395  *          rs -----
2396  *               rd -----
2397  */
2398 static char *ALUIPC(uint64 instruction, Dis_info *info)
2399 {
2400     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2401     int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2402 
2403     const char *rt = GPR(rt_value, info);
2404     g_autofree char *s = ADDRESS(s_value, 4, info);
2405 
2406     return img_format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2407 }
2408 
2409 
2410 /*
2411  * AND[16] rt3, rs3 -
2412  *
2413  *  5432109876543210
2414  *  101100
2415  *    rt3 ---
2416  *       rs3 ---
2417  *           eu ----
2418  */
2419 static char *AND_16_(uint64 instruction, Dis_info *info)
2420 {
2421     uint64 rt3_value = extract_rt3_9_8_7(instruction);
2422     uint64 rs3_value = extract_rs3_6_5_4(instruction);
2423 
2424     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2425     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2426 
2427     return img_format("AND %s, %s", rs3, rt3);
2428 }
2429 
2430 
2431 /*
2432  *
2433  *
2434  *   3         2         1
2435  *  10987654321098765432109876543210
2436  *  001000               x1110000101
2437  *     rt -----
2438  *          rs -----
2439  *               rd -----
2440  */
2441 static char *AND_32_(uint64 instruction, Dis_info *info)
2442 {
2443     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2444     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2445     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2446 
2447     const char *rd = GPR(rd_value, info);
2448     const char *rs = GPR(rs_value, info);
2449     const char *rt = GPR(rt_value, info);
2450 
2451     return img_format("AND %s, %s, %s", rd, rs, rt);
2452 }
2453 
2454 
2455 /*
2456  * ANDI rt, rs, u -
2457  *
2458  *  5432109876543210
2459  *  101100
2460  *    rt3 ---
2461  *       rs3 ---
2462  *           eu ----
2463  */
2464 static char *ANDI_16_(uint64 instruction, Dis_info *info)
2465 {
2466     uint64 rt3_value = extract_rt3_9_8_7(instruction);
2467     uint64 rs3_value = extract_rs3_6_5_4(instruction);
2468     uint64 eu_value = extract_eu_3_2_1_0(instruction);
2469 
2470     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2471     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2472     uint64 eu = encode_eu_from_u_andi16(eu_value);
2473 
2474     return img_format("ANDI %s, %s, 0x%" PRIx64, rt3, rs3, eu);
2475 }
2476 
2477 
2478 /*
2479  *
2480  *
2481  *   3         2         1
2482  *  10987654321098765432109876543210
2483  *  001000               x1110000101
2484  *     rt -----
2485  *          rs -----
2486  *               rd -----
2487  */
2488 static char *ANDI_32_(uint64 instruction, Dis_info *info)
2489 {
2490     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2491     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2492     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2493 
2494     const char *rt = GPR(rt_value, info);
2495     const char *rs = GPR(rs_value, info);
2496 
2497     return img_format("ANDI %s, %s, 0x%" PRIx64, rt, rs, u_value);
2498 }
2499 
2500 
2501 /*
2502  *
2503  *
2504  *   3         2         1
2505  *  10987654321098765432109876543210
2506  *  001000               x1110000101
2507  *     rt -----
2508  *          rs -----
2509  *               rd -----
2510  */
2511 static char *APPEND(uint64 instruction, Dis_info *info)
2512 {
2513     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2514     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2515     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2516 
2517     const char *rt = GPR(rt_value, info);
2518     const char *rs = GPR(rs_value, info);
2519 
2520     return img_format("APPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
2521 }
2522 
2523 
2524 /*
2525  *
2526  *
2527  *   3         2         1
2528  *  10987654321098765432109876543210
2529  *  001000               x1110000101
2530  *     rt -----
2531  *          rs -----
2532  *               rd -----
2533  */
2534 static char *ASET(uint64 instruction, Dis_info *info)
2535 {
2536     uint64 bit_value = extract_bit_23_22_21(instruction);
2537     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2538     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2539 
2540     const char *rs = GPR(rs_value, info);
2541 
2542     return img_format("ASET 0x%" PRIx64 ", %" PRId64 "(%s)",
2543                       bit_value, s_value, rs);
2544 }
2545 
2546 
2547 /*
2548  *
2549  *
2550  *   3         2         1
2551  *  10987654321098765432109876543210
2552  *  001000               x1110000101
2553  *     rt -----
2554  *          rs -----
2555  *               rd -----
2556  */
2557 static char *BALC_16_(uint64 instruction, Dis_info *info)
2558 {
2559     int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2560 
2561     g_autofree char *s = ADDRESS(s_value, 2, info);
2562 
2563     return img_format("BALC %s", s);
2564 }
2565 
2566 
2567 /*
2568  *
2569  *
2570  *   3         2         1
2571  *  10987654321098765432109876543210
2572  *  001000               x1110000101
2573  *     rt -----
2574  *          rs -----
2575  *               rd -----
2576  */
2577 static char *BALC_32_(uint64 instruction, Dis_info *info)
2578 {
2579     int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2580 
2581     g_autofree char *s = ADDRESS(s_value, 4, info);
2582 
2583     return img_format("BALC %s", s);
2584 }
2585 
2586 
2587 /*
2588  *
2589  *
2590  *   3         2         1
2591  *  10987654321098765432109876543210
2592  *  001000               x1110000101
2593  *     rt -----
2594  *          rs -----
2595  *               rd -----
2596  */
2597 static char *BALRSC(uint64 instruction, Dis_info *info)
2598 {
2599     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2600     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2601 
2602     const char *rt = GPR(rt_value, info);
2603     const char *rs = GPR(rs_value, info);
2604 
2605     return img_format("BALRSC %s, %s", rt, rs);
2606 }
2607 
2608 
2609 /*
2610  *
2611  *
2612  *   3         2         1
2613  *  10987654321098765432109876543210
2614  *  001000               x1110000101
2615  *     rt -----
2616  *          rs -----
2617  *               rd -----
2618  */
2619 static char *BBEQZC(uint64 instruction, Dis_info *info)
2620 {
2621     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2622     uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2623     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2624 
2625     const char *rt = GPR(rt_value, info);
2626     g_autofree char *s = ADDRESS(s_value, 4, info);
2627 
2628     return img_format("BBEQZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2629 }
2630 
2631 
2632 /*
2633  *
2634  *
2635  *   3         2         1
2636  *  10987654321098765432109876543210
2637  *  001000               x1110000101
2638  *     rt -----
2639  *          rs -----
2640  *               rd -----
2641  */
2642 static char *BBNEZC(uint64 instruction, Dis_info *info)
2643 {
2644     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2645     uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2646     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2647 
2648     const char *rt = GPR(rt_value, info);
2649     g_autofree char *s = ADDRESS(s_value, 4, info);
2650 
2651     return img_format("BBNEZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2652 }
2653 
2654 
2655 /*
2656  *
2657  *
2658  *   3         2         1
2659  *  10987654321098765432109876543210
2660  *  001000               x1110000101
2661  *     rt -----
2662  *          rs -----
2663  *               rd -----
2664  */
2665 static char *BC_16_(uint64 instruction, Dis_info *info)
2666 {
2667     int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2668 
2669     g_autofree char *s = ADDRESS(s_value, 2, info);
2670 
2671     return img_format("BC %s", s);
2672 }
2673 
2674 
2675 /*
2676  *
2677  *
2678  *   3         2         1
2679  *  10987654321098765432109876543210
2680  *  001000               x1110000101
2681  *     rt -----
2682  *          rs -----
2683  *               rd -----
2684  */
2685 static char *BC_32_(uint64 instruction, Dis_info *info)
2686 {
2687     int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2688 
2689     g_autofree char *s = ADDRESS(s_value, 4, info);
2690 
2691     return img_format("BC %s", s);
2692 }
2693 
2694 
2695 /*
2696  *
2697  *
2698  *   3         2         1
2699  *  10987654321098765432109876543210
2700  *  001000               x1110000101
2701  *     rt -----
2702  *          rs -----
2703  *               rd -----
2704  */
2705 static char *BC1EQZC(uint64 instruction, Dis_info *info)
2706 {
2707     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2708     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2709 
2710     const char *ft = FPR(ft_value, info);
2711     g_autofree char *s = ADDRESS(s_value, 4, info);
2712 
2713     return img_format("BC1EQZC %s, %s", ft, s);
2714 }
2715 
2716 
2717 /*
2718  *
2719  *
2720  *   3         2         1
2721  *  10987654321098765432109876543210
2722  *  001000               x1110000101
2723  *     rt -----
2724  *          rs -----
2725  *               rd -----
2726  */
2727 static char *BC1NEZC(uint64 instruction, Dis_info *info)
2728 {
2729     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2730     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2731 
2732     const char *ft = FPR(ft_value, info);
2733     g_autofree char *s = ADDRESS(s_value, 4, info);
2734 
2735     return img_format("BC1NEZC %s, %s", ft, s);
2736 }
2737 
2738 
2739 /*
2740  *
2741  *
2742  *   3         2         1
2743  *  10987654321098765432109876543210
2744  *  001000               x1110000101
2745  *     rt -----
2746  *          rs -----
2747  *               rd -----
2748  */
2749 static char *BC2EQZC(uint64 instruction, Dis_info *info)
2750 {
2751     uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2752     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2753 
2754     g_autofree char *s = ADDRESS(s_value, 4, info);
2755 
2756     return img_format("BC2EQZC CP%" PRIu64 ", %s", ct_value, s);
2757 }
2758 
2759 
2760 /*
2761  *
2762  *
2763  *   3         2         1
2764  *  10987654321098765432109876543210
2765  *  001000               x1110000101
2766  *     rt -----
2767  *          rs -----
2768  *               rd -----
2769  */
2770 static char *BC2NEZC(uint64 instruction, Dis_info *info)
2771 {
2772     uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2773     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2774 
2775     g_autofree char *s = ADDRESS(s_value, 4, info);
2776 
2777     return img_format("BC2NEZC CP%" PRIu64 ", %s", ct_value, s);
2778 }
2779 
2780 
2781 /*
2782  *
2783  *
2784  *   3         2         1
2785  *  10987654321098765432109876543210
2786  *  001000               x1110000101
2787  *     rt -----
2788  *          rs -----
2789  *               rd -----
2790  */
2791 static char *BEQC_16_(uint64 instruction, Dis_info *info)
2792 {
2793     uint64 rt3_value = extract_rt3_9_8_7(instruction);
2794     uint64 rs3_value = extract_rs3_6_5_4(instruction);
2795     uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2796 
2797     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2798     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2799     g_autofree char *u = ADDRESS(u_value, 2, info);
2800 
2801     return img_format("BEQC %s, %s, %s", rs3, rt3, u);
2802 }
2803 
2804 
2805 /*
2806  *
2807  *
2808  *   3         2         1
2809  *  10987654321098765432109876543210
2810  *  001000               x1110000101
2811  *     rt -----
2812  *          rs -----
2813  *               rd -----
2814  */
2815 static char *BEQC_32_(uint64 instruction, Dis_info *info)
2816 {
2817     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2818     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2819     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2820 
2821     const char *rs = GPR(rs_value, info);
2822     const char *rt = GPR(rt_value, info);
2823     g_autofree char *s = ADDRESS(s_value, 4, info);
2824 
2825     return img_format("BEQC %s, %s, %s", rs, rt, s);
2826 }
2827 
2828 
2829 /*
2830  *
2831  *
2832  *   3         2         1
2833  *  10987654321098765432109876543210
2834  *  001000               x1110000101
2835  *     rt -----
2836  *          rs -----
2837  *               rd -----
2838  */
2839 static char *BEQIC(uint64 instruction, Dis_info *info)
2840 {
2841     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2842     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2843     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2844 
2845     const char *rt = GPR(rt_value, info);
2846     g_autofree char *s = ADDRESS(s_value, 4, info);
2847 
2848     return img_format("BEQIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2849 }
2850 
2851 
2852 /*
2853  *
2854  *
2855  *   3         2         1
2856  *  10987654321098765432109876543210
2857  *  001000               x1110000101
2858  *     rt -----
2859  *          rs -----
2860  *               rd -----
2861  */
2862 static char *BEQZC_16_(uint64 instruction, Dis_info *info)
2863 {
2864     uint64 rt3_value = extract_rt3_9_8_7(instruction);
2865     int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
2866 
2867     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2868     g_autofree char *s = ADDRESS(s_value, 2, info);
2869 
2870     return img_format("BEQZC %s, %s", rt3, s);
2871 }
2872 
2873 
2874 /*
2875  *
2876  *
2877  *   3         2         1
2878  *  10987654321098765432109876543210
2879  *  001000               x1110000101
2880  *     rt -----
2881  *          rs -----
2882  *               rd -----
2883  */
2884 static char *BGEC(uint64 instruction, Dis_info *info)
2885 {
2886     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2887     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2888     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2889 
2890     const char *rs = GPR(rs_value, info);
2891     const char *rt = GPR(rt_value, info);
2892     g_autofree char *s = ADDRESS(s_value, 4, info);
2893 
2894     return img_format("BGEC %s, %s, %s", rs, rt, s);
2895 }
2896 
2897 
2898 /*
2899  *
2900  *
2901  *   3         2         1
2902  *  10987654321098765432109876543210
2903  *  001000               x1110000101
2904  *     rt -----
2905  *          rs -----
2906  *               rd -----
2907  */
2908 static char *BGEIC(uint64 instruction, Dis_info *info)
2909 {
2910     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2911     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2912     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2913 
2914     const char *rt = GPR(rt_value, info);
2915     g_autofree char *s = ADDRESS(s_value, 4, info);
2916 
2917     return img_format("BGEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2918 }
2919 
2920 
2921 /*
2922  *
2923  *
2924  *   3         2         1
2925  *  10987654321098765432109876543210
2926  *  001000               x1110000101
2927  *     rt -----
2928  *          rs -----
2929  *               rd -----
2930  */
2931 static char *BGEIUC(uint64 instruction, Dis_info *info)
2932 {
2933     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2934     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2935     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2936 
2937     const char *rt = GPR(rt_value, info);
2938     g_autofree char *s = ADDRESS(s_value, 4, info);
2939 
2940     return img_format("BGEIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2941 }
2942 
2943 
2944 /*
2945  *
2946  *
2947  *   3         2         1
2948  *  10987654321098765432109876543210
2949  *  001000               x1110000101
2950  *     rt -----
2951  *          rs -----
2952  *               rd -----
2953  */
2954 static char *BGEUC(uint64 instruction, Dis_info *info)
2955 {
2956     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2957     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2958     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2959 
2960     const char *rs = GPR(rs_value, info);
2961     const char *rt = GPR(rt_value, info);
2962     g_autofree char *s = ADDRESS(s_value, 4, info);
2963 
2964     return img_format("BGEUC %s, %s, %s", rs, rt, s);
2965 }
2966 
2967 
2968 /*
2969  *
2970  *
2971  *   3         2         1
2972  *  10987654321098765432109876543210
2973  *  001000               x1110000101
2974  *     rt -----
2975  *          rs -----
2976  *               rd -----
2977  */
2978 static char *BLTC(uint64 instruction, Dis_info *info)
2979 {
2980     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2981     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2982     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2983 
2984     const char *rs = GPR(rs_value, info);
2985     const char *rt = GPR(rt_value, info);
2986     g_autofree char *s = ADDRESS(s_value, 4, info);
2987 
2988     return img_format("BLTC %s, %s, %s", rs, rt, s);
2989 }
2990 
2991 
2992 /*
2993  *
2994  *
2995  *   3         2         1
2996  *  10987654321098765432109876543210
2997  *  001000               x1110000101
2998  *     rt -----
2999  *          rs -----
3000  *               rd -----
3001  */
3002 static char *BLTIC(uint64 instruction, Dis_info *info)
3003 {
3004     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3005     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3006     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3007 
3008     const char *rt = GPR(rt_value, info);
3009     g_autofree char *s = ADDRESS(s_value, 4, info);
3010 
3011     return img_format("BLTIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
3012 }
3013 
3014 
3015 /*
3016  *
3017  *
3018  *   3         2         1
3019  *  10987654321098765432109876543210
3020  *  001000               x1110000101
3021  *     rt -----
3022  *          rs -----
3023  *               rd -----
3024  */
3025 static char *BLTIUC(uint64 instruction, Dis_info *info)
3026 {
3027     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3028     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3029     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3030 
3031     const char *rt = GPR(rt_value, info);
3032     g_autofree char *s = ADDRESS(s_value, 4, info);
3033 
3034     return img_format("BLTIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
3035 }
3036 
3037 
3038 /*
3039  *
3040  *
3041  *   3         2         1
3042  *  10987654321098765432109876543210
3043  *  001000               x1110000101
3044  *     rt -----
3045  *          rs -----
3046  *               rd -----
3047  */
3048 static char *BLTUC(uint64 instruction, Dis_info *info)
3049 {
3050     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3051     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3052     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3053 
3054     const char *rs = GPR(rs_value, info);
3055     const char *rt = GPR(rt_value, info);
3056     g_autofree char *s = ADDRESS(s_value, 4, info);
3057 
3058     return img_format("BLTUC %s, %s, %s", rs, rt, s);
3059 }
3060 
3061 
3062 /*
3063  *
3064  *
3065  *   3         2         1
3066  *  10987654321098765432109876543210
3067  *  001000               x1110000101
3068  *     rt -----
3069  *          rs -----
3070  *               rd -----
3071  */
3072 static char *BNEC_16_(uint64 instruction, Dis_info *info)
3073 {
3074     uint64 rt3_value = extract_rt3_9_8_7(instruction);
3075     uint64 rs3_value = extract_rs3_6_5_4(instruction);
3076     uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3077 
3078     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
3079     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
3080     g_autofree char *u = ADDRESS(u_value, 2, info);
3081 
3082     return img_format("BNEC %s, %s, %s", rs3, rt3, u);
3083 }
3084 
3085 
3086 /*
3087  *
3088  *
3089  *   3         2         1
3090  *  10987654321098765432109876543210
3091  *  001000               x1110000101
3092  *     rt -----
3093  *          rs -----
3094  *               rd -----
3095  */
3096 static char *BNEC_32_(uint64 instruction, Dis_info *info)
3097 {
3098     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3099     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3100     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3101 
3102     const char *rs = GPR(rs_value, info);
3103     const char *rt = GPR(rt_value, info);
3104     g_autofree char *s = ADDRESS(s_value, 4, info);
3105 
3106     return img_format("BNEC %s, %s, %s", rs, rt, s);
3107 }
3108 
3109 
3110 /*
3111  *
3112  *
3113  *   3         2         1
3114  *  10987654321098765432109876543210
3115  *  001000               x1110000101
3116  *     rt -----
3117  *          rs -----
3118  *               rd -----
3119  */
3120 static char *BNEIC(uint64 instruction, Dis_info *info)
3121 {
3122     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3123     uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3124     int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3125 
3126     const char *rt = GPR(rt_value, info);
3127     g_autofree char *s = ADDRESS(s_value, 4, info);
3128 
3129     return img_format("BNEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
3130 }
3131 
3132 
3133 /*
3134  *
3135  *
3136  *   3         2         1
3137  *  10987654321098765432109876543210
3138  *  001000               x1110000101
3139  *     rt -----
3140  *          rs -----
3141  *               rd -----
3142  */
3143 static char *BNEZC_16_(uint64 instruction, Dis_info *info)
3144 {
3145     uint64 rt3_value = extract_rt3_9_8_7(instruction);
3146     int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3147 
3148     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
3149     g_autofree char *s = ADDRESS(s_value, 2, info);
3150 
3151     return img_format("BNEZC %s, %s", rt3, s);
3152 }
3153 
3154 
3155 /*
3156  * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3157  *   DSPControl Pos field
3158  *
3159  *   3         2         1
3160  *  10987654321098765432109876543210
3161  *  100010xxxxx0010001
3162  *            s[13:1] -------------
3163  *                           s[14] -
3164  */
3165 static char *BPOSGE32C(uint64 instruction, Dis_info *info)
3166 {
3167     int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3168 
3169     g_autofree char *s = ADDRESS(s_value, 4, info);
3170 
3171     return img_format("BPOSGE32C %s", s);
3172 }
3173 
3174 
3175 /*
3176  *
3177  *
3178  *   3         2         1
3179  *  10987654321098765432109876543210
3180  *  001000               x1110000101
3181  *     rt -----
3182  *          rs -----
3183  *               rd -----
3184  */
3185 static char *BREAK_16_(uint64 instruction, Dis_info *info)
3186 {
3187     uint64 code_value = extract_code_2_1_0(instruction);
3188 
3189 
3190     return img_format("BREAK 0x%" PRIx64, code_value);
3191 }
3192 
3193 
3194 /*
3195  * BREAK code - Break. Cause a Breakpoint exception
3196  *
3197  *   3         2         1
3198  *  10987654321098765432109876543210
3199  *  001000               x1110000101
3200  *     rt -----
3201  *          rs -----
3202  *               rd -----
3203  */
3204 static char *BREAK_32_(uint64 instruction, Dis_info *info)
3205 {
3206     uint64 code_value = extract_code_18_to_0(instruction);
3207 
3208 
3209     return img_format("BREAK 0x%" PRIx64, code_value);
3210 }
3211 
3212 
3213 /*
3214  *
3215  *
3216  *   3         2         1
3217  *  10987654321098765432109876543210
3218  *  001000               x1110000101
3219  *     rt -----
3220  *          rs -----
3221  *               rd -----
3222  */
3223 static char *BRSC(uint64 instruction, Dis_info *info)
3224 {
3225     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3226 
3227     const char *rs = GPR(rs_value, info);
3228 
3229     return img_format("BRSC %s", rs);
3230 }
3231 
3232 
3233 /*
3234  *
3235  *
3236  *   3         2         1
3237  *  10987654321098765432109876543210
3238  *  001000               x1110000101
3239  *     rt -----
3240  *          rs -----
3241  *               rd -----
3242  */
3243 static char *CACHE(uint64 instruction, Dis_info *info)
3244 {
3245     uint64 op_value = extract_op_25_24_23_22_21(instruction);
3246     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3247     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3248 
3249     const char *rs = GPR(rs_value, info);
3250 
3251     return img_format("CACHE 0x%" PRIx64 ", %" PRId64 "(%s)",
3252                       op_value, s_value, rs);
3253 }
3254 
3255 
3256 /*
3257  *
3258  *
3259  *   3         2         1
3260  *  10987654321098765432109876543210
3261  *  001000               x1110000101
3262  *     rt -----
3263  *          rs -----
3264  *               rd -----
3265  */
3266 static char *CACHEE(uint64 instruction, Dis_info *info)
3267 {
3268     uint64 op_value = extract_op_25_24_23_22_21(instruction);
3269     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3270     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3271 
3272     const char *rs = GPR(rs_value, info);
3273 
3274     return img_format("CACHEE 0x%" PRIx64 ", %" PRId64 "(%s)",
3275                       op_value, s_value, rs);
3276 }
3277 
3278 
3279 /*
3280  *
3281  *
3282  *   3         2         1
3283  *  10987654321098765432109876543210
3284  *  001000               x1110000101
3285  *     rt -----
3286  *          rs -----
3287  *               rd -----
3288  */
3289 static char *CEIL_L_D(uint64 instruction, Dis_info *info)
3290 {
3291     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3292     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3293 
3294     const char *ft = FPR(ft_value, info);
3295     const char *fs = FPR(fs_value, info);
3296 
3297     return img_format("CEIL.L.D %s, %s", ft, fs);
3298 }
3299 
3300 
3301 /*
3302  *
3303  *
3304  *   3         2         1
3305  *  10987654321098765432109876543210
3306  *  001000               x1110000101
3307  *     rt -----
3308  *          rs -----
3309  *               rd -----
3310  */
3311 static char *CEIL_L_S(uint64 instruction, Dis_info *info)
3312 {
3313     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3314     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3315 
3316     const char *ft = FPR(ft_value, info);
3317     const char *fs = FPR(fs_value, info);
3318 
3319     return img_format("CEIL.L.S %s, %s", ft, fs);
3320 }
3321 
3322 
3323 /*
3324  *
3325  *
3326  *   3         2         1
3327  *  10987654321098765432109876543210
3328  *  001000               x1110000101
3329  *     rt -----
3330  *          rs -----
3331  *               rd -----
3332  */
3333 static char *CEIL_W_D(uint64 instruction, Dis_info *info)
3334 {
3335     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3336     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3337 
3338     const char *ft = FPR(ft_value, info);
3339     const char *fs = FPR(fs_value, info);
3340 
3341     return img_format("CEIL.W.D %s, %s", ft, fs);
3342 }
3343 
3344 
3345 /*
3346  *
3347  *
3348  *   3         2         1
3349  *  10987654321098765432109876543210
3350  *  001000               x1110000101
3351  *     rt -----
3352  *          rs -----
3353  *               rd -----
3354  */
3355 static char *CEIL_W_S(uint64 instruction, Dis_info *info)
3356 {
3357     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3358     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3359 
3360     const char *ft = FPR(ft_value, info);
3361     const char *fs = FPR(fs_value, info);
3362 
3363     return img_format("CEIL.W.S %s, %s", ft, fs);
3364 }
3365 
3366 
3367 /*
3368  *
3369  *
3370  *   3         2         1
3371  *  10987654321098765432109876543210
3372  *  001000               x1110000101
3373  *     rt -----
3374  *          rs -----
3375  *               rd -----
3376  */
3377 static char *CFC1(uint64 instruction, Dis_info *info)
3378 {
3379     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3380     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3381 
3382     const char *rt = GPR(rt_value, info);
3383 
3384     return img_format("CFC1 %s, CP%" PRIu64, rt, cs_value);
3385 }
3386 
3387 
3388 /*
3389  *
3390  *
3391  *   3         2         1
3392  *  10987654321098765432109876543210
3393  *  001000               x1110000101
3394  *     rt -----
3395  *          rs -----
3396  *               rd -----
3397  */
3398 static char *CFC2(uint64 instruction, Dis_info *info)
3399 {
3400     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3401     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3402 
3403     const char *rt = GPR(rt_value, info);
3404 
3405     return img_format("CFC2 %s, CP%" PRIu64, rt, cs_value);
3406 }
3407 
3408 
3409 /*
3410  *
3411  *
3412  *   3         2         1
3413  *  10987654321098765432109876543210
3414  *  001000               x1110000101
3415  *     rt -----
3416  *          rs -----
3417  *               rd -----
3418  */
3419 static char *CLASS_D(uint64 instruction, Dis_info *info)
3420 {
3421     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3422     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3423 
3424     const char *ft = FPR(ft_value, info);
3425     const char *fs = FPR(fs_value, info);
3426 
3427     return img_format("CLASS.D %s, %s", ft, fs);
3428 }
3429 
3430 
3431 /*
3432  *
3433  *
3434  *   3         2         1
3435  *  10987654321098765432109876543210
3436  *  001000               x1110000101
3437  *     rt -----
3438  *          rs -----
3439  *               rd -----
3440  */
3441 static char *CLASS_S(uint64 instruction, Dis_info *info)
3442 {
3443     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3444     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3445 
3446     const char *ft = FPR(ft_value, info);
3447     const char *fs = FPR(fs_value, info);
3448 
3449     return img_format("CLASS.S %s, %s", ft, fs);
3450 }
3451 
3452 
3453 /*
3454  *
3455  *
3456  *   3         2         1
3457  *  10987654321098765432109876543210
3458  *  001000               x1110000101
3459  *     rt -----
3460  *          rs -----
3461  *               rd -----
3462  */
3463 static char *CLO(uint64 instruction, Dis_info *info)
3464 {
3465     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3466     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3467 
3468     const char *rt = GPR(rt_value, info);
3469     const char *rs = GPR(rs_value, info);
3470 
3471     return img_format("CLO %s, %s", rt, rs);
3472 }
3473 
3474 
3475 /*
3476  *
3477  *
3478  *   3         2         1
3479  *  10987654321098765432109876543210
3480  *  001000               x1110000101
3481  *     rt -----
3482  *          rs -----
3483  *               rd -----
3484  */
3485 static char *CLZ(uint64 instruction, Dis_info *info)
3486 {
3487     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3488     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3489 
3490     const char *rt = GPR(rt_value, info);
3491     const char *rs = GPR(rs_value, info);
3492 
3493     return img_format("CLZ %s, %s", rt, rs);
3494 }
3495 
3496 
3497 /*
3498  *
3499  *
3500  *   3         2         1
3501  *  10987654321098765432109876543210
3502  *  001000               x1110000101
3503  *     rt -----
3504  *          rs -----
3505  *               rd -----
3506  */
3507 static char *CMP_AF_D(uint64 instruction, Dis_info *info)
3508 {
3509     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3510     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3511     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3512 
3513     const char *fd = FPR(fd_value, info);
3514     const char *fs = FPR(fs_value, info);
3515     const char *ft = FPR(ft_value, info);
3516 
3517     return img_format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3518 }
3519 
3520 
3521 /*
3522  *
3523  *
3524  *   3         2         1
3525  *  10987654321098765432109876543210
3526  *  001000               x1110000101
3527  *     rt -----
3528  *          rs -----
3529  *               rd -----
3530  */
3531 static char *CMP_AF_S(uint64 instruction, Dis_info *info)
3532 {
3533     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3534     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3535     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3536 
3537     const char *fd = FPR(fd_value, info);
3538     const char *fs = FPR(fs_value, info);
3539     const char *ft = FPR(ft_value, info);
3540 
3541     return img_format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3542 }
3543 
3544 
3545 /*
3546  *
3547  *
3548  *   3         2         1
3549  *  10987654321098765432109876543210
3550  *  001000               x1110000101
3551  *     rt -----
3552  *          rs -----
3553  *               rd -----
3554  */
3555 static char *CMP_EQ_D(uint64 instruction, Dis_info *info)
3556 {
3557     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3558     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3559     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3560 
3561     const char *fd = FPR(fd_value, info);
3562     const char *fs = FPR(fs_value, info);
3563     const char *ft = FPR(ft_value, info);
3564 
3565     return img_format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3566 }
3567 
3568 
3569 /*
3570  * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3571  *
3572  *   3         2         1
3573  *  10987654321098765432109876543210
3574  *  001000          xxxxxx0000000101
3575  *     rt -----
3576  *          rs -----
3577  */
3578 static char *CMP_EQ_PH(uint64 instruction, Dis_info *info)
3579 {
3580     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3581     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3582 
3583     const char *rs = GPR(rs_value, info);
3584     const char *rt = GPR(rt_value, info);
3585 
3586     return img_format("CMP.EQ.PH %s, %s", rs, rt);
3587 }
3588 
3589 
3590 /*
3591  *
3592  *
3593  *   3         2         1
3594  *  10987654321098765432109876543210
3595  *  001000               x1110000101
3596  *     rt -----
3597  *          rs -----
3598  *               rd -----
3599  */
3600 static char *CMP_EQ_S(uint64 instruction, Dis_info *info)
3601 {
3602     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3603     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3604     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3605 
3606     const char *fd = FPR(fd_value, info);
3607     const char *fs = FPR(fs_value, info);
3608     const char *ft = FPR(ft_value, info);
3609 
3610     return img_format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3611 }
3612 
3613 
3614 /*
3615  *
3616  *
3617  *   3         2         1
3618  *  10987654321098765432109876543210
3619  *  001000               x1110000101
3620  *     rt -----
3621  *          rs -----
3622  *               rd -----
3623  */
3624 static char *CMP_LE_D(uint64 instruction, Dis_info *info)
3625 {
3626     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3627     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3628     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3629 
3630     const char *fd = FPR(fd_value, info);
3631     const char *fs = FPR(fs_value, info);
3632     const char *ft = FPR(ft_value, info);
3633 
3634     return img_format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3635 }
3636 
3637 
3638 /*
3639  * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3640  *
3641  *   3         2         1
3642  *  10987654321098765432109876543210
3643  *  001000          xxxxxx0010000101
3644  *     rt -----
3645  *          rs -----
3646  */
3647 static char *CMP_LE_PH(uint64 instruction, Dis_info *info)
3648 {
3649     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3650     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3651 
3652     const char *rs = GPR(rs_value, info);
3653     const char *rt = GPR(rt_value, info);
3654 
3655     return img_format("CMP.LE.PH %s, %s", rs, rt);
3656 }
3657 
3658 
3659 /*
3660  *
3661  *
3662  *   3         2         1
3663  *  10987654321098765432109876543210
3664  *  001000               x1110000101
3665  *     rt -----
3666  *          rs -----
3667  *               rd -----
3668  */
3669 static char *CMP_LE_S(uint64 instruction, Dis_info *info)
3670 {
3671     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3672     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3673     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3674 
3675     const char *fd = FPR(fd_value, info);
3676     const char *fs = FPR(fs_value, info);
3677     const char *ft = FPR(ft_value, info);
3678 
3679     return img_format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3680 }
3681 
3682 
3683 /*
3684  *
3685  *
3686  *   3         2         1
3687  *  10987654321098765432109876543210
3688  *  001000               x1110000101
3689  *     rt -----
3690  *          rs -----
3691  *               rd -----
3692  */
3693 static char *CMP_LT_D(uint64 instruction, Dis_info *info)
3694 {
3695     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3696     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3697     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3698 
3699     const char *fd = FPR(fd_value, info);
3700     const char *fs = FPR(fs_value, info);
3701     const char *ft = FPR(ft_value, info);
3702 
3703     return img_format("CMP.LT.D %s, %s, %s", fd, fs, ft);
3704 }
3705 
3706 
3707 /*
3708  * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
3709  *
3710  *   3         2         1
3711  *  10987654321098765432109876543210
3712  *  001000          xxxxxx0001000101
3713  *     rt -----
3714  *          rs -----
3715  */
3716 static char *CMP_LT_PH(uint64 instruction, Dis_info *info)
3717 {
3718     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3719     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3720 
3721     const char *rs = GPR(rs_value, info);
3722     const char *rt = GPR(rt_value, info);
3723 
3724     return img_format("CMP.LT.PH %s, %s", rs, rt);
3725 }
3726 
3727 
3728 /*
3729  *
3730  *
3731  *   3         2         1
3732  *  10987654321098765432109876543210
3733  *  001000               x1110000101
3734  *     rt -----
3735  *          rs -----
3736  *               rd -----
3737  */
3738 static char *CMP_LT_S(uint64 instruction, Dis_info *info)
3739 {
3740     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3741     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3742     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3743 
3744     const char *fd = FPR(fd_value, info);
3745     const char *fs = FPR(fs_value, info);
3746     const char *ft = FPR(ft_value, info);
3747 
3748     return img_format("CMP.LT.S %s, %s, %s", fd, fs, ft);
3749 }
3750 
3751 
3752 /*
3753  *
3754  *
3755  *   3         2         1
3756  *  10987654321098765432109876543210
3757  *  001000               x1110000101
3758  *     rt -----
3759  *          rs -----
3760  *               rd -----
3761  */
3762 static char *CMP_NE_D(uint64 instruction, Dis_info *info)
3763 {
3764     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3765     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3766     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3767 
3768     const char *fd = FPR(fd_value, info);
3769     const char *fs = FPR(fs_value, info);
3770     const char *ft = FPR(ft_value, info);
3771 
3772     return img_format("CMP.NE.D %s, %s, %s", fd, fs, ft);
3773 }
3774 
3775 
3776 /*
3777  *
3778  *
3779  *   3         2         1
3780  *  10987654321098765432109876543210
3781  *  001000               x1110000101
3782  *     rt -----
3783  *          rs -----
3784  *               rd -----
3785  */
3786 static char *CMP_NE_S(uint64 instruction, Dis_info *info)
3787 {
3788     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3789     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3790     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3791 
3792     const char *fd = FPR(fd_value, info);
3793     const char *fs = FPR(fs_value, info);
3794     const char *ft = FPR(ft_value, info);
3795 
3796     return img_format("CMP.NE.S %s, %s, %s", fd, fs, ft);
3797 }
3798 
3799 
3800 /*
3801  *
3802  *
3803  *   3         2         1
3804  *  10987654321098765432109876543210
3805  *  001000               x1110000101
3806  *     rt -----
3807  *          rs -----
3808  *               rd -----
3809  */
3810 static char *CMP_OR_D(uint64 instruction, Dis_info *info)
3811 {
3812     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3813     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3814     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3815 
3816     const char *fd = FPR(fd_value, info);
3817     const char *fs = FPR(fs_value, info);
3818     const char *ft = FPR(ft_value, info);
3819 
3820     return img_format("CMP.OR.D %s, %s, %s", fd, fs, ft);
3821 }
3822 
3823 
3824 /*
3825  *
3826  *
3827  *   3         2         1
3828  *  10987654321098765432109876543210
3829  *  001000               x1110000101
3830  *     rt -----
3831  *          rs -----
3832  *               rd -----
3833  */
3834 static char *CMP_OR_S(uint64 instruction, Dis_info *info)
3835 {
3836     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3837     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3838     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3839 
3840     const char *fd = FPR(fd_value, info);
3841     const char *fs = FPR(fs_value, info);
3842     const char *ft = FPR(ft_value, info);
3843 
3844     return img_format("CMP.OR.S %s, %s, %s", fd, fs, ft);
3845 }
3846 
3847 
3848 /*
3849  *
3850  *
3851  *   3         2         1
3852  *  10987654321098765432109876543210
3853  *  001000               x1110000101
3854  *     rt -----
3855  *          rs -----
3856  *               rd -----
3857  */
3858 static char *CMP_SAF_D(uint64 instruction, Dis_info *info)
3859 {
3860     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3861     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3862     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3863 
3864     const char *fd = FPR(fd_value, info);
3865     const char *fs = FPR(fs_value, info);
3866     const char *ft = FPR(ft_value, info);
3867 
3868     return img_format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
3869 }
3870 
3871 
3872 /*
3873  *
3874  *
3875  *   3         2         1
3876  *  10987654321098765432109876543210
3877  *  001000               x1110000101
3878  *     rt -----
3879  *          rs -----
3880  *               rd -----
3881  */
3882 static char *CMP_SAF_S(uint64 instruction, Dis_info *info)
3883 {
3884     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3885     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3886     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3887 
3888     const char *fd = FPR(fd_value, info);
3889     const char *fs = FPR(fs_value, info);
3890     const char *ft = FPR(ft_value, info);
3891 
3892     return img_format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
3893 }
3894 
3895 
3896 /*
3897  *
3898  *
3899  *   3         2         1
3900  *  10987654321098765432109876543210
3901  *  001000               x1110000101
3902  *     rt -----
3903  *          rs -----
3904  *               rd -----
3905  */
3906 static char *CMP_SEQ_D(uint64 instruction, Dis_info *info)
3907 {
3908     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3909     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3910     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3911 
3912     const char *fd = FPR(fd_value, info);
3913     const char *fs = FPR(fs_value, info);
3914     const char *ft = FPR(ft_value, info);
3915 
3916     return img_format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
3917 }
3918 
3919 
3920 /*
3921  *
3922  *
3923  *   3         2         1
3924  *  10987654321098765432109876543210
3925  *  001000               x1110000101
3926  *     rt -----
3927  *          rs -----
3928  *               rd -----
3929  */
3930 static char *CMP_SEQ_S(uint64 instruction, Dis_info *info)
3931 {
3932     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3933     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3934     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3935 
3936     const char *fd = FPR(fd_value, info);
3937     const char *fs = FPR(fs_value, info);
3938     const char *ft = FPR(ft_value, info);
3939 
3940     return img_format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
3941 }
3942 
3943 
3944 /*
3945  *
3946  *
3947  *   3         2         1
3948  *  10987654321098765432109876543210
3949  *  001000               x1110000101
3950  *     rt -----
3951  *          rs -----
3952  *               rd -----
3953  */
3954 static char *CMP_SLE_D(uint64 instruction, Dis_info *info)
3955 {
3956     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3957     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3958     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3959 
3960     const char *fd = FPR(fd_value, info);
3961     const char *fs = FPR(fs_value, info);
3962     const char *ft = FPR(ft_value, info);
3963 
3964     return img_format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
3965 }
3966 
3967 
3968 /*
3969  *
3970  *
3971  *   3         2         1
3972  *  10987654321098765432109876543210
3973  *  001000               x1110000101
3974  *     rt -----
3975  *          rs -----
3976  *               rd -----
3977  */
3978 static char *CMP_SLE_S(uint64 instruction, Dis_info *info)
3979 {
3980     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3981     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3982     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3983 
3984     const char *fd = FPR(fd_value, info);
3985     const char *fs = FPR(fs_value, info);
3986     const char *ft = FPR(ft_value, info);
3987 
3988     return img_format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
3989 }
3990 
3991 
3992 /*
3993  *
3994  *
3995  *   3         2         1
3996  *  10987654321098765432109876543210
3997  *  001000               x1110000101
3998  *     rt -----
3999  *          rs -----
4000  *               rd -----
4001  */
4002 static char *CMP_SLT_D(uint64 instruction, Dis_info *info)
4003 {
4004     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4005     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4006     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4007 
4008     const char *fd = FPR(fd_value, info);
4009     const char *fs = FPR(fs_value, info);
4010     const char *ft = FPR(ft_value, info);
4011 
4012     return img_format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
4013 }
4014 
4015 
4016 /*
4017  *
4018  *
4019  *   3         2         1
4020  *  10987654321098765432109876543210
4021  *  001000               x1110000101
4022  *     rt -----
4023  *          rs -----
4024  *               rd -----
4025  */
4026 static char *CMP_SLT_S(uint64 instruction, Dis_info *info)
4027 {
4028     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4029     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4030     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4031 
4032     const char *fd = FPR(fd_value, info);
4033     const char *fs = FPR(fs_value, info);
4034     const char *ft = FPR(ft_value, info);
4035 
4036     return img_format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
4037 }
4038 
4039 
4040 /*
4041  *
4042  *
4043  *   3         2         1
4044  *  10987654321098765432109876543210
4045  *  001000               x1110000101
4046  *     rt -----
4047  *          rs -----
4048  *               rd -----
4049  */
4050 static char *CMP_SNE_D(uint64 instruction, Dis_info *info)
4051 {
4052     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4053     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4054     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4055 
4056     const char *fd = FPR(fd_value, info);
4057     const char *fs = FPR(fs_value, info);
4058     const char *ft = FPR(ft_value, info);
4059 
4060     return img_format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
4061 }
4062 
4063 
4064 /*
4065  *
4066  *
4067  *   3         2         1
4068  *  10987654321098765432109876543210
4069  *  001000               x1110000101
4070  *     rt -----
4071  *          rs -----
4072  *               rd -----
4073  */
4074 static char *CMP_SNE_S(uint64 instruction, Dis_info *info)
4075 {
4076     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4077     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4078     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4079 
4080     const char *fd = FPR(fd_value, info);
4081     const char *fs = FPR(fs_value, info);
4082     const char *ft = FPR(ft_value, info);
4083 
4084     return img_format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
4085 }
4086 
4087 
4088 /*
4089  *
4090  *
4091  *   3         2         1
4092  *  10987654321098765432109876543210
4093  *  001000               x1110000101
4094  *     rt -----
4095  *          rs -----
4096  *               rd -----
4097  */
4098 static char *CMP_SOR_D(uint64 instruction, Dis_info *info)
4099 {
4100     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4101     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4102     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4103 
4104     const char *fd = FPR(fd_value, info);
4105     const char *fs = FPR(fs_value, info);
4106     const char *ft = FPR(ft_value, info);
4107 
4108     return img_format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4109 }
4110 
4111 
4112 /*
4113  *
4114  *
4115  *   3         2         1
4116  *  10987654321098765432109876543210
4117  *  001000               x1110000101
4118  *     rt -----
4119  *          rs -----
4120  *               rd -----
4121  */
4122 static char *CMP_SOR_S(uint64 instruction, Dis_info *info)
4123 {
4124     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4125     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4126     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4127 
4128     const char *fd = FPR(fd_value, info);
4129     const char *fs = FPR(fs_value, info);
4130     const char *ft = FPR(ft_value, info);
4131 
4132     return img_format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4133 }
4134 
4135 
4136 /*
4137  *
4138  *
4139  *   3         2         1
4140  *  10987654321098765432109876543210
4141  *  001000               x1110000101
4142  *     rt -----
4143  *          rs -----
4144  *               rd -----
4145  */
4146 static char *CMP_SUEQ_D(uint64 instruction, Dis_info *info)
4147 {
4148     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4149     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4150     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4151 
4152     const char *fd = FPR(fd_value, info);
4153     const char *fs = FPR(fs_value, info);
4154     const char *ft = FPR(ft_value, info);
4155 
4156     return img_format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4157 }
4158 
4159 
4160 /*
4161  *
4162  *
4163  *   3         2         1
4164  *  10987654321098765432109876543210
4165  *  001000               x1110000101
4166  *     rt -----
4167  *          rs -----
4168  *               rd -----
4169  */
4170 static char *CMP_SUEQ_S(uint64 instruction, Dis_info *info)
4171 {
4172     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4173     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4174     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4175 
4176     const char *fd = FPR(fd_value, info);
4177     const char *fs = FPR(fs_value, info);
4178     const char *ft = FPR(ft_value, info);
4179 
4180     return img_format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4181 }
4182 
4183 
4184 /*
4185  *
4186  *
4187  *   3         2         1
4188  *  10987654321098765432109876543210
4189  *  001000               x1110000101
4190  *     rt -----
4191  *          rs -----
4192  *               rd -----
4193  */
4194 static char *CMP_SULE_D(uint64 instruction, Dis_info *info)
4195 {
4196     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4197     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4198     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4199 
4200     const char *fd = FPR(fd_value, info);
4201     const char *fs = FPR(fs_value, info);
4202     const char *ft = FPR(ft_value, info);
4203 
4204     return img_format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4205 }
4206 
4207 
4208 /*
4209  *
4210  *
4211  *   3         2         1
4212  *  10987654321098765432109876543210
4213  *  001000               x1110000101
4214  *     rt -----
4215  *          rs -----
4216  *               rd -----
4217  */
4218 static char *CMP_SULE_S(uint64 instruction, Dis_info *info)
4219 {
4220     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4221     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4222     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4223 
4224     const char *fd = FPR(fd_value, info);
4225     const char *fs = FPR(fs_value, info);
4226     const char *ft = FPR(ft_value, info);
4227 
4228     return img_format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4229 }
4230 
4231 
4232 /*
4233  *
4234  *
4235  *   3         2         1
4236  *  10987654321098765432109876543210
4237  *  001000               x1110000101
4238  *     rt -----
4239  *          rs -----
4240  *               rd -----
4241  */
4242 static char *CMP_SULT_D(uint64 instruction, Dis_info *info)
4243 {
4244     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4245     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4246     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4247 
4248     const char *fd = FPR(fd_value, info);
4249     const char *fs = FPR(fs_value, info);
4250     const char *ft = FPR(ft_value, info);
4251 
4252     return img_format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4253 }
4254 
4255 
4256 /*
4257  *
4258  *
4259  *   3         2         1
4260  *  10987654321098765432109876543210
4261  *  001000               x1110000101
4262  *     rt -----
4263  *          rs -----
4264  *               rd -----
4265  */
4266 static char *CMP_SULT_S(uint64 instruction, Dis_info *info)
4267 {
4268     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4269     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4270     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4271 
4272     const char *fd = FPR(fd_value, info);
4273     const char *fs = FPR(fs_value, info);
4274     const char *ft = FPR(ft_value, info);
4275 
4276     return img_format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4277 }
4278 
4279 
4280 /*
4281  *
4282  *
4283  *   3         2         1
4284  *  10987654321098765432109876543210
4285  *  001000               x1110000101
4286  *     rt -----
4287  *          rs -----
4288  *               rd -----
4289  */
4290 static char *CMP_SUN_D(uint64 instruction, Dis_info *info)
4291 {
4292     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4293     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4294     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4295 
4296     const char *fd = FPR(fd_value, info);
4297     const char *fs = FPR(fs_value, info);
4298     const char *ft = FPR(ft_value, info);
4299 
4300     return img_format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4301 }
4302 
4303 
4304 /*
4305  *
4306  *
4307  *   3         2         1
4308  *  10987654321098765432109876543210
4309  *  001000               x1110000101
4310  *     rt -----
4311  *          rs -----
4312  *               rd -----
4313  */
4314 static char *CMP_SUNE_D(uint64 instruction, Dis_info *info)
4315 {
4316     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4317     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4318     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4319 
4320     const char *fd = FPR(fd_value, info);
4321     const char *fs = FPR(fs_value, info);
4322     const char *ft = FPR(ft_value, info);
4323 
4324     return img_format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4325 }
4326 
4327 
4328 /*
4329  *
4330  *
4331  *   3         2         1
4332  *  10987654321098765432109876543210
4333  *  001000               x1110000101
4334  *     rt -----
4335  *          rs -----
4336  *               rd -----
4337  */
4338 static char *CMP_SUNE_S(uint64 instruction, Dis_info *info)
4339 {
4340     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4341     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4342     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4343 
4344     const char *fd = FPR(fd_value, info);
4345     const char *fs = FPR(fs_value, info);
4346     const char *ft = FPR(ft_value, info);
4347 
4348     return img_format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4349 }
4350 
4351 
4352 /*
4353  *
4354  *
4355  *   3         2         1
4356  *  10987654321098765432109876543210
4357  *  001000               x1110000101
4358  *     rt -----
4359  *          rs -----
4360  *               rd -----
4361  */
4362 static char *CMP_SUN_S(uint64 instruction, Dis_info *info)
4363 {
4364     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4365     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4366     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4367 
4368     const char *fd = FPR(fd_value, info);
4369     const char *fs = FPR(fs_value, info);
4370     const char *ft = FPR(ft_value, info);
4371 
4372     return img_format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4373 }
4374 
4375 
4376 /*
4377  *
4378  *
4379  *   3         2         1
4380  *  10987654321098765432109876543210
4381  *  001000               x1110000101
4382  *     rt -----
4383  *          rs -----
4384  *               rd -----
4385  */
4386 static char *CMP_UEQ_D(uint64 instruction, Dis_info *info)
4387 {
4388     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4389     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4390     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4391 
4392     const char *fd = FPR(fd_value, info);
4393     const char *fs = FPR(fs_value, info);
4394     const char *ft = FPR(ft_value, info);
4395 
4396     return img_format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4397 }
4398 
4399 
4400 /*
4401  *
4402  *
4403  *   3         2         1
4404  *  10987654321098765432109876543210
4405  *  001000               x1110000101
4406  *     rt -----
4407  *          rs -----
4408  *               rd -----
4409  */
4410 static char *CMP_UEQ_S(uint64 instruction, Dis_info *info)
4411 {
4412     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4413     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4414     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4415 
4416     const char *fd = FPR(fd_value, info);
4417     const char *fs = FPR(fs_value, info);
4418     const char *ft = FPR(ft_value, info);
4419 
4420     return img_format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4421 }
4422 
4423 
4424 /*
4425  *
4426  *
4427  *   3         2         1
4428  *  10987654321098765432109876543210
4429  *  001000               x1110000101
4430  *     rt -----
4431  *          rs -----
4432  *               rd -----
4433  */
4434 static char *CMP_ULE_D(uint64 instruction, Dis_info *info)
4435 {
4436     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4437     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4438     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4439 
4440     const char *fd = FPR(fd_value, info);
4441     const char *fs = FPR(fs_value, info);
4442     const char *ft = FPR(ft_value, info);
4443 
4444     return img_format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4445 }
4446 
4447 
4448 /*
4449  *
4450  *
4451  *   3         2         1
4452  *  10987654321098765432109876543210
4453  *  001000               x1110000101
4454  *     rt -----
4455  *          rs -----
4456  *               rd -----
4457  */
4458 static char *CMP_ULE_S(uint64 instruction, Dis_info *info)
4459 {
4460     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4461     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4462     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4463 
4464     const char *fd = FPR(fd_value, info);
4465     const char *fs = FPR(fs_value, info);
4466     const char *ft = FPR(ft_value, info);
4467 
4468     return img_format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4469 }
4470 
4471 
4472 /*
4473  *
4474  *
4475  *   3         2         1
4476  *  10987654321098765432109876543210
4477  *  001000               x1110000101
4478  *     rt -----
4479  *          rs -----
4480  *               rd -----
4481  */
4482 static char *CMP_ULT_D(uint64 instruction, Dis_info *info)
4483 {
4484     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4485     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4486     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4487 
4488     const char *fd = FPR(fd_value, info);
4489     const char *fs = FPR(fs_value, info);
4490     const char *ft = FPR(ft_value, info);
4491 
4492     return img_format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4493 }
4494 
4495 
4496 /*
4497  *
4498  *
4499  *   3         2         1
4500  *  10987654321098765432109876543210
4501  *  001000               x1110000101
4502  *     rt -----
4503  *          rs -----
4504  *               rd -----
4505  */
4506 static char *CMP_ULT_S(uint64 instruction, Dis_info *info)
4507 {
4508     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4509     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4510     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4511 
4512     const char *fd = FPR(fd_value, info);
4513     const char *fs = FPR(fs_value, info);
4514     const char *ft = FPR(ft_value, info);
4515 
4516     return img_format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4517 }
4518 
4519 
4520 /*
4521  *
4522  *
4523  *   3         2         1
4524  *  10987654321098765432109876543210
4525  *  001000               x1110000101
4526  *     rt -----
4527  *          rs -----
4528  *               rd -----
4529  */
4530 static char *CMP_UN_D(uint64 instruction, Dis_info *info)
4531 {
4532     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4533     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4534     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4535 
4536     const char *fd = FPR(fd_value, info);
4537     const char *fs = FPR(fs_value, info);
4538     const char *ft = FPR(ft_value, info);
4539 
4540     return img_format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4541 }
4542 
4543 
4544 /*
4545  *
4546  *
4547  *   3         2         1
4548  *  10987654321098765432109876543210
4549  *  001000               x1110000101
4550  *     rt -----
4551  *          rs -----
4552  *               rd -----
4553  */
4554 static char *CMP_UNE_D(uint64 instruction, Dis_info *info)
4555 {
4556     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4557     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4558     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4559 
4560     const char *fd = FPR(fd_value, info);
4561     const char *fs = FPR(fs_value, info);
4562     const char *ft = FPR(ft_value, info);
4563 
4564     return img_format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4565 }
4566 
4567 
4568 /*
4569  *
4570  *
4571  *   3         2         1
4572  *  10987654321098765432109876543210
4573  *  001000               x1110000101
4574  *     rt -----
4575  *          rs -----
4576  *               rd -----
4577  */
4578 static char *CMP_UNE_S(uint64 instruction, Dis_info *info)
4579 {
4580     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4581     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4582     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4583 
4584     const char *fd = FPR(fd_value, info);
4585     const char *fs = FPR(fs_value, info);
4586     const char *ft = FPR(ft_value, info);
4587 
4588     return img_format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4589 }
4590 
4591 
4592 /*
4593  *
4594  *
4595  *   3         2         1
4596  *  10987654321098765432109876543210
4597  *  001000               x1110000101
4598  *     rt -----
4599  *          rs -----
4600  *               rd -----
4601  */
4602 static char *CMP_UN_S(uint64 instruction, Dis_info *info)
4603 {
4604     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4605     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4606     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4607 
4608     const char *fd = FPR(fd_value, info);
4609     const char *fs = FPR(fs_value, info);
4610     const char *ft = FPR(ft_value, info);
4611 
4612     return img_format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4613 }
4614 
4615 
4616 /*
4617  * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4618  *   four bytes and write result to GPR and DSPControl
4619  *
4620  *   3         2         1
4621  *  10987654321098765432109876543210
4622  *  001000               x0110000101
4623  *     rt -----
4624  *          rs -----
4625  *               rd -----
4626  */
4627 static char *CMPGDU_EQ_QB(uint64 instruction, Dis_info *info)
4628 {
4629     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4630     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4631     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4632 
4633     const char *rd = GPR(rd_value, info);
4634     const char *rs = GPR(rs_value, info);
4635     const char *rt = GPR(rt_value, info);
4636 
4637     return img_format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4638 }
4639 
4640 
4641 /*
4642  * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4643  *   four bytes and write result to GPR and DSPControl
4644  *
4645  *   3         2         1
4646  *  10987654321098765432109876543210
4647  *  001000               x1000000101
4648  *     rt -----
4649  *          rs -----
4650  *               rd -----
4651  */
4652 static char *CMPGDU_LE_QB(uint64 instruction, Dis_info *info)
4653 {
4654     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4655     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4656     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4657 
4658     const char *rd = GPR(rd_value, info);
4659     const char *rs = GPR(rs_value, info);
4660     const char *rt = GPR(rt_value, info);
4661 
4662     return img_format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4663 }
4664 
4665 
4666 /*
4667  * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4668  *   four bytes and write result to GPR and DSPControl
4669  *
4670  *   3         2         1
4671  *  10987654321098765432109876543210
4672  *  001000               x0111000101
4673  *     rt -----
4674  *          rs -----
4675  *               rd -----
4676  */
4677 static char *CMPGDU_LT_QB(uint64 instruction, Dis_info *info)
4678 {
4679     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4680     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4681     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4682 
4683     const char *rd = GPR(rd_value, info);
4684     const char *rs = GPR(rs_value, info);
4685     const char *rt = GPR(rt_value, info);
4686 
4687     return img_format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4688 }
4689 
4690 
4691 /*
4692  * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4693  *   byte values and write result to a GPR
4694  *
4695  *   3         2         1
4696  *  10987654321098765432109876543210
4697  *  001000               x0011000101
4698  *     rt -----
4699  *          rs -----
4700  *               rd -----
4701  */
4702 static char *CMPGU_EQ_QB(uint64 instruction, Dis_info *info)
4703 {
4704     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4705     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4706     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4707 
4708     const char *rd = GPR(rd_value, info);
4709     const char *rs = GPR(rs_value, info);
4710     const char *rt = GPR(rt_value, info);
4711 
4712     return img_format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
4713 }
4714 
4715 
4716 /*
4717  * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
4718  *   byte values and write result to a GPR
4719  *
4720  *   3         2         1
4721  *  10987654321098765432109876543210
4722  *  001000               x0101000101
4723  *     rt -----
4724  *          rs -----
4725  *               rd -----
4726  */
4727 static char *CMPGU_LE_QB(uint64 instruction, Dis_info *info)
4728 {
4729     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4730     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4731     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4732 
4733     const char *rd = GPR(rd_value, info);
4734     const char *rs = GPR(rs_value, info);
4735     const char *rt = GPR(rt_value, info);
4736 
4737     return img_format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
4738 }
4739 
4740 
4741 /*
4742  * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
4743  *   byte values and write result to a GPR
4744  *
4745  *   3         2         1
4746  *  10987654321098765432109876543210
4747  *  001000               x0100000101
4748  *     rt -----
4749  *          rs -----
4750  *               rd -----
4751  */
4752 static char *CMPGU_LT_QB(uint64 instruction, Dis_info *info)
4753 {
4754     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4755     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4756     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4757 
4758     const char *rd = GPR(rd_value, info);
4759     const char *rs = GPR(rs_value, info);
4760     const char *rt = GPR(rt_value, info);
4761 
4762     return img_format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
4763 }
4764 
4765 
4766 /*
4767  * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4768  *   byte values
4769  *
4770  *   3         2         1
4771  *  10987654321098765432109876543210
4772  *  001000          xxxxxx1001000101
4773  *     rt -----
4774  *          rs -----
4775  */
4776 static char *CMPU_EQ_QB(uint64 instruction, Dis_info *info)
4777 {
4778     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4779     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4780 
4781     const char *rs = GPR(rs_value, info);
4782     const char *rt = GPR(rt_value, info);
4783 
4784     return img_format("CMPU.EQ.QB %s, %s", rs, rt);
4785 }
4786 
4787 
4788 /*
4789  * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
4790  *   byte values
4791  *
4792  *   3         2         1
4793  *  10987654321098765432109876543210
4794  *  001000          xxxxxx1011000101
4795  *     rt -----
4796  *          rs -----
4797  */
4798 static char *CMPU_LE_QB(uint64 instruction, Dis_info *info)
4799 {
4800     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4801     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4802 
4803     const char *rs = GPR(rs_value, info);
4804     const char *rt = GPR(rt_value, info);
4805 
4806     return img_format("CMPU.LE.QB %s, %s", rs, rt);
4807 }
4808 
4809 
4810 /*
4811  * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
4812  *   byte values
4813  *
4814  *   3         2         1
4815  *  10987654321098765432109876543210
4816  *  001000          xxxxxx1010000101
4817  *     rt -----
4818  *          rs -----
4819  */
4820 static char *CMPU_LT_QB(uint64 instruction, Dis_info *info)
4821 {
4822     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4823     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4824 
4825     const char *rs = GPR(rs_value, info);
4826     const char *rt = GPR(rt_value, info);
4827 
4828     return img_format("CMPU.LT.QB %s, %s", rs, rt);
4829 }
4830 
4831 
4832 /*
4833  *
4834  *
4835  *   3         2         1
4836  *  10987654321098765432109876543210
4837  *  001000               x1110000101
4838  *     rt -----
4839  *          rs -----
4840  *               rd -----
4841  */
4842 static char *COP2_1(uint64 instruction, Dis_info *info)
4843 {
4844     uint64 cofun_value = extract_cofun_25_24_23(instruction);
4845 
4846 
4847     return img_format("COP2_1 0x%" PRIx64, cofun_value);
4848 }
4849 
4850 
4851 /*
4852  *
4853  *
4854  *   3         2         1
4855  *  10987654321098765432109876543210
4856  *  001000               x1110000101
4857  *     rt -----
4858  *          rs -----
4859  *               rd -----
4860  */
4861 static char *CTC1(uint64 instruction, Dis_info *info)
4862 {
4863     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4864     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4865 
4866     const char *rt = GPR(rt_value, info);
4867 
4868     return img_format("CTC1 %s, CP%" PRIu64, rt, cs_value);
4869 }
4870 
4871 
4872 /*
4873  *
4874  *
4875  *   3         2         1
4876  *  10987654321098765432109876543210
4877  *  001000               x1110000101
4878  *     rt -----
4879  *          rs -----
4880  *               rd -----
4881  */
4882 static char *CTC2(uint64 instruction, Dis_info *info)
4883 {
4884     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4885     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4886 
4887     const char *rt = GPR(rt_value, info);
4888 
4889     return img_format("CTC2 %s, CP%" PRIu64, rt, cs_value);
4890 }
4891 
4892 
4893 /*
4894  *
4895  *
4896  *   3         2         1
4897  *  10987654321098765432109876543210
4898  *  001000               x1110000101
4899  *     rt -----
4900  *          rs -----
4901  *               rd -----
4902  */
4903 static char *CVT_D_L(uint64 instruction, Dis_info *info)
4904 {
4905     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4906     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4907 
4908     const char *ft = FPR(ft_value, info);
4909     const char *fs = FPR(fs_value, info);
4910 
4911     return img_format("CVT.D.L %s, %s", ft, fs);
4912 }
4913 
4914 
4915 /*
4916  *
4917  *
4918  *   3         2         1
4919  *  10987654321098765432109876543210
4920  *  001000               x1110000101
4921  *     rt -----
4922  *          rs -----
4923  *               rd -----
4924  */
4925 static char *CVT_D_S(uint64 instruction, Dis_info *info)
4926 {
4927     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4928     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4929 
4930     const char *ft = FPR(ft_value, info);
4931     const char *fs = FPR(fs_value, info);
4932 
4933     return img_format("CVT.D.S %s, %s", ft, fs);
4934 }
4935 
4936 
4937 /*
4938  *
4939  *
4940  *   3         2         1
4941  *  10987654321098765432109876543210
4942  *  001000               x1110000101
4943  *     rt -----
4944  *          rs -----
4945  *               rd -----
4946  */
4947 static char *CVT_D_W(uint64 instruction, Dis_info *info)
4948 {
4949     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4950     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4951 
4952     const char *ft = FPR(ft_value, info);
4953     const char *fs = FPR(fs_value, info);
4954 
4955     return img_format("CVT.D.W %s, %s", ft, fs);
4956 }
4957 
4958 
4959 /*
4960  *
4961  *
4962  *   3         2         1
4963  *  10987654321098765432109876543210
4964  *  001000               x1110000101
4965  *     rt -----
4966  *          rs -----
4967  *               rd -----
4968  */
4969 static char *CVT_L_D(uint64 instruction, Dis_info *info)
4970 {
4971     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4972     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4973 
4974     const char *ft = FPR(ft_value, info);
4975     const char *fs = FPR(fs_value, info);
4976 
4977     return img_format("CVT.L.D %s, %s", ft, fs);
4978 }
4979 
4980 
4981 /*
4982  *
4983  *
4984  *   3         2         1
4985  *  10987654321098765432109876543210
4986  *  001000               x1110000101
4987  *     rt -----
4988  *          rs -----
4989  *               rd -----
4990  */
4991 static char *CVT_L_S(uint64 instruction, Dis_info *info)
4992 {
4993     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4994     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4995 
4996     const char *ft = FPR(ft_value, info);
4997     const char *fs = FPR(fs_value, info);
4998 
4999     return img_format("CVT.L.S %s, %s", ft, fs);
5000 }
5001 
5002 
5003 /*
5004  *
5005  *
5006  *   3         2         1
5007  *  10987654321098765432109876543210
5008  *  001000               x1110000101
5009  *     rt -----
5010  *          rs -----
5011  *               rd -----
5012  */
5013 static char *CVT_S_D(uint64 instruction, Dis_info *info)
5014 {
5015     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5016     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5017 
5018     const char *ft = FPR(ft_value, info);
5019     const char *fs = FPR(fs_value, info);
5020 
5021     return img_format("CVT.S.D %s, %s", ft, fs);
5022 }
5023 
5024 
5025 /*
5026  *
5027  *
5028  *   3         2         1
5029  *  10987654321098765432109876543210
5030  *  001000               x1110000101
5031  *     rt -----
5032  *          rs -----
5033  *               rd -----
5034  */
5035 static char *CVT_S_L(uint64 instruction, Dis_info *info)
5036 {
5037     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5038     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5039 
5040     const char *ft = FPR(ft_value, info);
5041     const char *fs = FPR(fs_value, info);
5042 
5043     return img_format("CVT.S.L %s, %s", ft, fs);
5044 }
5045 
5046 
5047 /*
5048  *
5049  *
5050  *   3         2         1
5051  *  10987654321098765432109876543210
5052  *  001000               x1110000101
5053  *     rt -----
5054  *          rs -----
5055  *               rd -----
5056  */
5057 static char *CVT_S_PL(uint64 instruction, Dis_info *info)
5058 {
5059     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5060     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5061 
5062     const char *ft = FPR(ft_value, info);
5063     const char *fs = FPR(fs_value, info);
5064 
5065     return img_format("CVT.S.PL %s, %s", ft, fs);
5066 }
5067 
5068 
5069 /*
5070  *
5071  *
5072  *   3         2         1
5073  *  10987654321098765432109876543210
5074  *  001000               x1110000101
5075  *     rt -----
5076  *          rs -----
5077  *               rd -----
5078  */
5079 static char *CVT_S_PU(uint64 instruction, Dis_info *info)
5080 {
5081     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5082     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5083 
5084     const char *ft = FPR(ft_value, info);
5085     const char *fs = FPR(fs_value, info);
5086 
5087     return img_format("CVT.S.PU %s, %s", ft, fs);
5088 }
5089 
5090 
5091 /*
5092  *
5093  *
5094  *   3         2         1
5095  *  10987654321098765432109876543210
5096  *  001000               x1110000101
5097  *     rt -----
5098  *          rs -----
5099  *               rd -----
5100  */
5101 static char *CVT_S_W(uint64 instruction, Dis_info *info)
5102 {
5103     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5104     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5105 
5106     const char *ft = FPR(ft_value, info);
5107     const char *fs = FPR(fs_value, info);
5108 
5109     return img_format("CVT.S.W %s, %s", ft, fs);
5110 }
5111 
5112 
5113 /*
5114  *
5115  *
5116  *   3         2         1
5117  *  10987654321098765432109876543210
5118  *  001000               x1110000101
5119  *     rt -----
5120  *          rs -----
5121  *               rd -----
5122  */
5123 static char *CVT_W_D(uint64 instruction, Dis_info *info)
5124 {
5125     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5126     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5127 
5128     const char *ft = FPR(ft_value, info);
5129     const char *fs = FPR(fs_value, info);
5130 
5131     return img_format("CVT.W.D %s, %s", ft, fs);
5132 }
5133 
5134 
5135 /*
5136  *
5137  *
5138  *   3         2         1
5139  *  10987654321098765432109876543210
5140  *  001000               x1110000101
5141  *     rt -----
5142  *          rs -----
5143  *               rd -----
5144  */
5145 static char *CVT_W_S(uint64 instruction, Dis_info *info)
5146 {
5147     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5148     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5149 
5150     const char *ft = FPR(ft_value, info);
5151     const char *fs = FPR(fs_value, info);
5152 
5153     return img_format("CVT.W.S %s, %s", ft, fs);
5154 }
5155 
5156 
5157 /*
5158  *
5159  *
5160  *   3         2         1
5161  *  10987654321098765432109876543210
5162  *  001000               x1110000101
5163  *     rt -----
5164  *          rs -----
5165  *               rd -----
5166  */
5167 static char *DADDIU_48_(uint64 instruction, Dis_info *info)
5168 {
5169     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5170     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5171 
5172     const char *rt = GPR(rt_value, info);
5173 
5174     return img_format("DADDIU %s, %" PRId64, rt, s_value);
5175 }
5176 
5177 
5178 /*
5179  *
5180  *
5181  *   3         2         1
5182  *  10987654321098765432109876543210
5183  *  001000               x1110000101
5184  *     rt -----
5185  *          rs -----
5186  *               rd -----
5187  */
5188 static char *DADDIU_NEG_(uint64 instruction, Dis_info *info)
5189 {
5190     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5191     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5192     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5193 
5194     const char *rt = GPR(rt_value, info);
5195     const char *rs = GPR(rs_value, info);
5196     int64 u = neg_copy(u_value);
5197 
5198     return img_format("DADDIU %s, %s, %" PRId64, rt, rs, u);
5199 }
5200 
5201 
5202 /*
5203  *
5204  *
5205  *   3         2         1
5206  *  10987654321098765432109876543210
5207  *  001000               x1110000101
5208  *     rt -----
5209  *          rs -----
5210  *               rd -----
5211  */
5212 static char *DADDIU_U12_(uint64 instruction, Dis_info *info)
5213 {
5214     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5215     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5216     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5217 
5218     const char *rt = GPR(rt_value, info);
5219     const char *rs = GPR(rs_value, info);
5220 
5221     return img_format("DADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
5222 }
5223 
5224 
5225 /*
5226  *
5227  *
5228  *   3         2         1
5229  *  10987654321098765432109876543210
5230  *  001000               x1110000101
5231  *     rt -----
5232  *          rs -----
5233  *               rd -----
5234  */
5235 static char *DADD(uint64 instruction, Dis_info *info)
5236 {
5237     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5238     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5239     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5240 
5241     const char *rd = GPR(rd_value, info);
5242     const char *rs = GPR(rs_value, info);
5243     const char *rt = GPR(rt_value, info);
5244 
5245     return img_format("DADD %s, %s, %s", rd, rs, rt);
5246 }
5247 
5248 
5249 /*
5250  *
5251  *
5252  *   3         2         1
5253  *  10987654321098765432109876543210
5254  *  001000               x1110000101
5255  *     rt -----
5256  *          rs -----
5257  *               rd -----
5258  */
5259 static char *DADDU(uint64 instruction, Dis_info *info)
5260 {
5261     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5262     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5263     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5264 
5265     const char *rd = GPR(rd_value, info);
5266     const char *rs = GPR(rs_value, info);
5267     const char *rt = GPR(rt_value, info);
5268 
5269     return img_format("DADDU %s, %s, %s", rd, rs, rt);
5270 }
5271 
5272 
5273 /*
5274  *
5275  *
5276  *   3         2         1
5277  *  10987654321098765432109876543210
5278  *  001000               x1110000101
5279  *     rt -----
5280  *          rs -----
5281  *               rd -----
5282  */
5283 static char *DCLO(uint64 instruction, Dis_info *info)
5284 {
5285     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5286     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5287 
5288     const char *rt = GPR(rt_value, info);
5289     const char *rs = GPR(rs_value, info);
5290 
5291     return img_format("DCLO %s, %s", rt, rs);
5292 }
5293 
5294 
5295 /*
5296  *
5297  *
5298  *   3         2         1
5299  *  10987654321098765432109876543210
5300  *  001000               x1110000101
5301  *     rt -----
5302  *          rs -----
5303  *               rd -----
5304  */
5305 static char *DCLZ(uint64 instruction, Dis_info *info)
5306 {
5307     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5308     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5309 
5310     const char *rt = GPR(rt_value, info);
5311     const char *rs = GPR(rs_value, info);
5312 
5313     return img_format("DCLZ %s, %s", rt, rs);
5314 }
5315 
5316 
5317 /*
5318  *
5319  *
5320  *   3         2         1
5321  *  10987654321098765432109876543210
5322  *  001000               x1110000101
5323  *     rt -----
5324  *          rs -----
5325  *               rd -----
5326  */
5327 static char *DDIV(uint64 instruction, Dis_info *info)
5328 {
5329     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5330     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5331     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5332 
5333     const char *rd = GPR(rd_value, info);
5334     const char *rs = GPR(rs_value, info);
5335     const char *rt = GPR(rt_value, info);
5336 
5337     return img_format("DDIV %s, %s, %s", rd, rs, rt);
5338 }
5339 
5340 
5341 /*
5342  *
5343  *
5344  *   3         2         1
5345  *  10987654321098765432109876543210
5346  *  001000               x1110000101
5347  *     rt -----
5348  *          rs -----
5349  *               rd -----
5350  */
5351 static char *DDIVU(uint64 instruction, Dis_info *info)
5352 {
5353     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5354     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5355     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5356 
5357     const char *rd = GPR(rd_value, info);
5358     const char *rs = GPR(rs_value, info);
5359     const char *rt = GPR(rt_value, info);
5360 
5361     return img_format("DDIVU %s, %s, %s", rd, rs, rt);
5362 }
5363 
5364 
5365 /*
5366  *
5367  *
5368  *   3         2         1
5369  *  10987654321098765432109876543210
5370  *  001000               x1110000101
5371  *     rt -----
5372  *          rs -----
5373  *               rd -----
5374  */
5375 static char *DERET(uint64 instruction, Dis_info *info)
5376 {
5377     (void)instruction;
5378 
5379     return g_strdup("DERET ");
5380 }
5381 
5382 
5383 /*
5384  *
5385  *
5386  *   3         2         1
5387  *  10987654321098765432109876543210
5388  *  001000               x1110000101
5389  *     rt -----
5390  *          rs -----
5391  *               rd -----
5392  */
5393 static char *DEXTM(uint64 instruction, Dis_info *info)
5394 {
5395     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5396     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5397     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5398     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5399 
5400     const char *rt = GPR(rt_value, info);
5401     const char *rs = GPR(rs_value, info);
5402     uint64 msbd = encode_msbd_from_size(msbd_value);
5403 
5404     return img_format("DEXTM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5405                       rt, rs, lsb_value, msbd);
5406 }
5407 
5408 
5409 /*
5410  *
5411  *
5412  *   3         2         1
5413  *  10987654321098765432109876543210
5414  *  001000               x1110000101
5415  *     rt -----
5416  *          rs -----
5417  *               rd -----
5418  */
5419 static char *DEXT(uint64 instruction, Dis_info *info)
5420 {
5421     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5422     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5423     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5424     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5425 
5426     const char *rt = GPR(rt_value, info);
5427     const char *rs = GPR(rs_value, info);
5428     uint64 msbd = encode_msbd_from_size(msbd_value);
5429 
5430     return img_format("DEXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5431                       rt, rs, lsb_value, msbd);
5432 }
5433 
5434 
5435 /*
5436  *
5437  *
5438  *   3         2         1
5439  *  10987654321098765432109876543210
5440  *  001000               x1110000101
5441  *     rt -----
5442  *          rs -----
5443  *               rd -----
5444  */
5445 static char *DEXTU(uint64 instruction, Dis_info *info)
5446 {
5447     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5448     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5449     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5450     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5451 
5452     const char *rt = GPR(rt_value, info);
5453     const char *rs = GPR(rs_value, info);
5454     uint64 msbd = encode_msbd_from_size(msbd_value);
5455 
5456     return img_format("DEXTU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5457                       rt, rs, lsb_value, msbd);
5458 }
5459 
5460 
5461 /*
5462  *
5463  *
5464  *   3         2         1
5465  *  10987654321098765432109876543210
5466  *  001000               x1110000101
5467  *     rt -----
5468  *          rs -----
5469  *               rd -----
5470  */
5471 static char *DINSM(uint64 instruction, Dis_info *info)
5472 {
5473     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5474     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5475     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5476     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5477 
5478     const char *rt = GPR(rt_value, info);
5479     const char *rs = GPR(rs_value, info);
5480     /* !!!!!!!!!! - no conversion function */
5481 
5482     return img_format("DINSM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5483                       rt, rs, lsb_value, msbd_value);
5484     /* hand edited */
5485 }
5486 
5487 
5488 /*
5489  *
5490  *
5491  *   3         2         1
5492  *  10987654321098765432109876543210
5493  *  001000               x1110000101
5494  *     rt -----
5495  *          rs -----
5496  *               rd -----
5497  */
5498 static char *DINS(uint64 instruction, Dis_info *info)
5499 {
5500     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5501     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5502     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5503     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5504 
5505     const char *rt = GPR(rt_value, info);
5506     const char *rs = GPR(rs_value, info);
5507     /* !!!!!!!!!! - no conversion function */
5508 
5509     return img_format("DINS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5510                       rt, rs, lsb_value, msbd_value);
5511     /* hand edited */
5512 }
5513 
5514 
5515 /*
5516  *
5517  *
5518  *   3         2         1
5519  *  10987654321098765432109876543210
5520  *  001000               x1110000101
5521  *     rt -----
5522  *          rs -----
5523  *               rd -----
5524  */
5525 static char *DINSU(uint64 instruction, Dis_info *info)
5526 {
5527     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5528     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5529     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5530     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5531 
5532     const char *rt = GPR(rt_value, info);
5533     const char *rs = GPR(rs_value, info);
5534     /* !!!!!!!!!! - no conversion function */
5535 
5536     return img_format("DINSU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5537                       rt, rs, lsb_value, msbd_value);
5538     /* hand edited */
5539 }
5540 
5541 
5542 /*
5543  *
5544  *
5545  *   3         2         1
5546  *  10987654321098765432109876543210
5547  *  001000               x1110000101
5548  *     rt -----
5549  *          rs -----
5550  *               rd -----
5551  */
5552 static char *DI(uint64 instruction, Dis_info *info)
5553 {
5554     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5555 
5556     const char *rt = GPR(rt_value, info);
5557 
5558     return img_format("DI %s", rt);
5559 }
5560 
5561 
5562 /*
5563  *
5564  *
5565  *   3         2         1
5566  *  10987654321098765432109876543210
5567  *  001000               x1110000101
5568  *     rt -----
5569  *          rs -----
5570  *               rd -----
5571  */
5572 static char *DIV(uint64 instruction, Dis_info *info)
5573 {
5574     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5575     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5576     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5577 
5578     const char *rd = GPR(rd_value, info);
5579     const char *rs = GPR(rs_value, info);
5580     const char *rt = GPR(rt_value, info);
5581 
5582     return img_format("DIV %s, %s, %s", rd, rs, rt);
5583 }
5584 
5585 
5586 /*
5587  *
5588  *
5589  *   3         2         1
5590  *  10987654321098765432109876543210
5591  *  001000               x1110000101
5592  *     rt -----
5593  *          rs -----
5594  *               rd -----
5595  */
5596 static char *DIV_D(uint64 instruction, Dis_info *info)
5597 {
5598     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5599     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5600     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5601 
5602     const char *fd = FPR(fd_value, info);
5603     const char *fs = FPR(fs_value, info);
5604     const char *ft = FPR(ft_value, info);
5605 
5606     return img_format("DIV.D %s, %s, %s", fd, fs, ft);
5607 }
5608 
5609 
5610 /*
5611  *
5612  *
5613  *   3         2         1
5614  *  10987654321098765432109876543210
5615  *  001000               x1110000101
5616  *     rt -----
5617  *          rs -----
5618  *               rd -----
5619  */
5620 static char *DIV_S(uint64 instruction, Dis_info *info)
5621 {
5622     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5623     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5624     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5625 
5626     const char *fd = FPR(fd_value, info);
5627     const char *fs = FPR(fs_value, info);
5628     const char *ft = FPR(ft_value, info);
5629 
5630     return img_format("DIV.S %s, %s, %s", fd, fs, ft);
5631 }
5632 
5633 
5634 /*
5635  *
5636  *
5637  *   3         2         1
5638  *  10987654321098765432109876543210
5639  *  001000               x1110000101
5640  *     rt -----
5641  *          rs -----
5642  *               rd -----
5643  */
5644 static char *DIVU(uint64 instruction, Dis_info *info)
5645 {
5646     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5647     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5648     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5649 
5650     const char *rd = GPR(rd_value, info);
5651     const char *rs = GPR(rs_value, info);
5652     const char *rt = GPR(rt_value, info);
5653 
5654     return img_format("DIVU %s, %s, %s", rd, rs, rt);
5655 }
5656 
5657 
5658 /*
5659  *
5660  *
5661  *   3         2         1
5662  *  10987654321098765432109876543210
5663  *  001000               x1110000101
5664  *     rt -----
5665  *          rs -----
5666  *               rd -----
5667  */
5668 static char *DLSA(uint64 instruction, Dis_info *info)
5669 {
5670     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5671     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5672     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5673     uint64 u2_value = extract_u2_10_9(instruction);
5674 
5675     const char *rd = GPR(rd_value, info);
5676     const char *rs = GPR(rs_value, info);
5677     const char *rt = GPR(rt_value, info);
5678 
5679     return img_format("DLSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
5680 }
5681 
5682 
5683 /*
5684  *
5685  *
5686  *   3         2         1
5687  *  10987654321098765432109876543210
5688  *  001000               x1110000101
5689  *     rt -----
5690  *          rs -----
5691  *               rd -----
5692  */
5693 static char *DLUI_48_(uint64 instruction, Dis_info *info)
5694 {
5695     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5696     uint64 u_value = extract_u_31_to_0__s32(instruction);
5697 
5698     const char *rt = GPR(rt_value, info);
5699 
5700     return img_format("DLUI %s, 0x%" PRIx64, rt, u_value);
5701 }
5702 
5703 
5704 /*
5705  *
5706  *
5707  *   3         2         1
5708  *  10987654321098765432109876543210
5709  *  001000               x1110000101
5710  *     rt -----
5711  *          rs -----
5712  *               rd -----
5713  */
5714 static char *DMFC0(uint64 instruction, Dis_info *info)
5715 {
5716     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5717     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5718     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5719 
5720     const char *rt = GPR(rt_value, info);
5721 
5722     return img_format("DMFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5723                       rt, c0s_value, sel_value);
5724 }
5725 
5726 
5727 /*
5728  *
5729  *
5730  *   3         2         1
5731  *  10987654321098765432109876543210
5732  *  001000               x1110000101
5733  *     rt -----
5734  *          rs -----
5735  *               rd -----
5736  */
5737 static char *DMFC1(uint64 instruction, Dis_info *info)
5738 {
5739     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5740     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5741 
5742     const char *rt = GPR(rt_value, info);
5743     const char *fs = FPR(fs_value, info);
5744 
5745     return img_format("DMFC1 %s, %s", rt, fs);
5746 }
5747 
5748 
5749 /*
5750  *
5751  *
5752  *   3         2         1
5753  *  10987654321098765432109876543210
5754  *  001000               x1110000101
5755  *     rt -----
5756  *          rs -----
5757  *               rd -----
5758  */
5759 static char *DMFC2(uint64 instruction, Dis_info *info)
5760 {
5761     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5762     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5763 
5764     const char *rt = GPR(rt_value, info);
5765 
5766     return img_format("DMFC2 %s, CP%" PRIu64, rt, cs_value);
5767 }
5768 
5769 
5770 /*
5771  *
5772  *
5773  *   3         2         1
5774  *  10987654321098765432109876543210
5775  *  001000               x1110000101
5776  *     rt -----
5777  *          rs -----
5778  *               rd -----
5779  */
5780 static char *DMFGC0(uint64 instruction, Dis_info *info)
5781 {
5782     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5783     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5784     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5785 
5786     const char *rt = GPR(rt_value, info);
5787 
5788     return img_format("DMFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5789                       rt, c0s_value, sel_value);
5790 }
5791 
5792 
5793 /*
5794  *
5795  *
5796  *   3         2         1
5797  *  10987654321098765432109876543210
5798  *  001000               x1110000101
5799  *     rt -----
5800  *          rs -----
5801  *               rd -----
5802  */
5803 static char *DMOD(uint64 instruction, Dis_info *info)
5804 {
5805     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5806     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5807     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5808 
5809     const char *rd = GPR(rd_value, info);
5810     const char *rs = GPR(rs_value, info);
5811     const char *rt = GPR(rt_value, info);
5812 
5813     return img_format("DMOD %s, %s, %s", rd, rs, rt);
5814 }
5815 
5816 
5817 /*
5818  *
5819  *
5820  *   3         2         1
5821  *  10987654321098765432109876543210
5822  *  001000               x1110000101
5823  *     rt -----
5824  *          rs -----
5825  *               rd -----
5826  */
5827 static char *DMODU(uint64 instruction, Dis_info *info)
5828 {
5829     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5830     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5831     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5832 
5833     const char *rd = GPR(rd_value, info);
5834     const char *rs = GPR(rs_value, info);
5835     const char *rt = GPR(rt_value, info);
5836 
5837     return img_format("DMODU %s, %s, %s", rd, rs, rt);
5838 }
5839 
5840 
5841 /*
5842  *
5843  *
5844  *   3         2         1
5845  *  10987654321098765432109876543210
5846  *  001000               x1110000101
5847  *     rt -----
5848  *          rs -----
5849  *               rd -----
5850  */
5851 static char *DMTC0(uint64 instruction, Dis_info *info)
5852 {
5853     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5854     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5855     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5856 
5857     const char *rt = GPR(rt_value, info);
5858 
5859     return img_format("DMTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5860                       rt, c0s_value, sel_value);
5861 }
5862 
5863 
5864 /*
5865  *
5866  *
5867  *   3         2         1
5868  *  10987654321098765432109876543210
5869  *  001000               x1110000101
5870  *     rt -----
5871  *          rs -----
5872  *               rd -----
5873  */
5874 static char *DMTC1(uint64 instruction, Dis_info *info)
5875 {
5876     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5877     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5878 
5879     const char *rt = GPR(rt_value, info);
5880     const char *fs = FPR(fs_value, info);
5881 
5882     return img_format("DMTC1 %s, %s", rt, fs);
5883 }
5884 
5885 
5886 /*
5887  *
5888  *
5889  *   3         2         1
5890  *  10987654321098765432109876543210
5891  *  001000               x1110000101
5892  *     rt -----
5893  *          rs -----
5894  *               rd -----
5895  */
5896 static char *DMTC2(uint64 instruction, Dis_info *info)
5897 {
5898     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5899     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5900 
5901     const char *rt = GPR(rt_value, info);
5902 
5903     return img_format("DMTC2 %s, CP%" PRIu64, rt, cs_value);
5904 }
5905 
5906 
5907 /*
5908  *
5909  *
5910  *   3         2         1
5911  *  10987654321098765432109876543210
5912  *  001000               x1110000101
5913  *     rt -----
5914  *          rs -----
5915  *               rd -----
5916  */
5917 static char *DMTGC0(uint64 instruction, Dis_info *info)
5918 {
5919     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5920     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5921     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5922 
5923     const char *rt = GPR(rt_value, info);
5924 
5925     return img_format("DMTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5926                       rt, c0s_value, sel_value);
5927 }
5928 
5929 
5930 /*
5931  *
5932  *
5933  *   3         2         1
5934  *  10987654321098765432109876543210
5935  *  001000               x1110000101
5936  *     rt -----
5937  *          rs -----
5938  *               rd -----
5939  */
5940 static char *DMT(uint64 instruction, Dis_info *info)
5941 {
5942     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5943 
5944     const char *rt = GPR(rt_value, info);
5945 
5946     return img_format("DMT %s", rt);
5947 }
5948 
5949 
5950 /*
5951  *
5952  *
5953  *   3         2         1
5954  *  10987654321098765432109876543210
5955  *  001000               x1110000101
5956  *     rt -----
5957  *          rs -----
5958  *               rd -----
5959  */
5960 static char *DMUH(uint64 instruction, Dis_info *info)
5961 {
5962     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5963     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5964     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5965 
5966     const char *rd = GPR(rd_value, info);
5967     const char *rs = GPR(rs_value, info);
5968     const char *rt = GPR(rt_value, info);
5969 
5970     return img_format("DMUH %s, %s, %s", rd, rs, rt);
5971 }
5972 
5973 
5974 /*
5975  *
5976  *
5977  *   3         2         1
5978  *  10987654321098765432109876543210
5979  *  001000               x1110000101
5980  *     rt -----
5981  *          rs -----
5982  *               rd -----
5983  */
5984 static char *DMUHU(uint64 instruction, Dis_info *info)
5985 {
5986     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5987     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5988     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5989 
5990     const char *rd = GPR(rd_value, info);
5991     const char *rs = GPR(rs_value, info);
5992     const char *rt = GPR(rt_value, info);
5993 
5994     return img_format("DMUHU %s, %s, %s", rd, rs, rt);
5995 }
5996 
5997 
5998 /*
5999  *
6000  *
6001  *   3         2         1
6002  *  10987654321098765432109876543210
6003  *  001000               x1110000101
6004  *     rt -----
6005  *          rs -----
6006  *               rd -----
6007  */
6008 static char *DMUL(uint64 instruction, Dis_info *info)
6009 {
6010     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6011     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6012     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6013 
6014     const char *rd = GPR(rd_value, info);
6015     const char *rs = GPR(rs_value, info);
6016     const char *rt = GPR(rt_value, info);
6017 
6018     return img_format("DMUL %s, %s, %s", rd, rs, rt);
6019 }
6020 
6021 
6022 /*
6023  *
6024  *
6025  *   3         2         1
6026  *  10987654321098765432109876543210
6027  *  001000               x1110000101
6028  *     rt -----
6029  *          rs -----
6030  *               rd -----
6031  */
6032 static char *DMULU(uint64 instruction, Dis_info *info)
6033 {
6034     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6035     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6036     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6037 
6038     const char *rd = GPR(rd_value, info);
6039     const char *rs = GPR(rs_value, info);
6040     const char *rt = GPR(rt_value, info);
6041 
6042     return img_format("DMULU %s, %s, %s", rd, rs, rt);
6043 }
6044 
6045 
6046 /*
6047  * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6048  *   vector integer halfword elements
6049  *
6050  *   3         2         1
6051  *  10987654321098765432109876543210
6052  *  001000            00000010111111
6053  *     rt -----
6054  *          rs -----
6055  *               ac --
6056  */
6057 static char *DPA_W_PH(uint64 instruction, Dis_info *info)
6058 {
6059     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6060     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6061     uint64 ac_value = extract_ac_15_14(instruction);
6062 
6063     const char *ac = AC(ac_value, info);
6064     const char *rs = GPR(rs_value, info);
6065     const char *rt = GPR(rt_value, info);
6066 
6067     return img_format("DPA.W.PH %s, %s, %s", ac, rs, rt);
6068 }
6069 
6070 
6071 /*
6072  *
6073  *
6074  *   3         2         1
6075  *  10987654321098765432109876543210
6076  *  001000               x1110000101
6077  *     rt -----
6078  *          rs -----
6079  *               rd -----
6080  */
6081 static char *DPAQ_SA_L_W(uint64 instruction, Dis_info *info)
6082 {
6083     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6084     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6085     uint64 ac_value = extract_ac_15_14(instruction);
6086 
6087     const char *ac = AC(ac_value, info);
6088     const char *rs = GPR(rs_value, info);
6089     const char *rt = GPR(rt_value, info);
6090 
6091     return img_format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6092 }
6093 
6094 
6095 /*
6096  *
6097  *
6098  *   3         2         1
6099  *  10987654321098765432109876543210
6100  *  001000               x1110000101
6101  *     rt -----
6102  *          rs -----
6103  *               rd -----
6104  */
6105 static char *DPAQ_S_W_PH(uint64 instruction, Dis_info *info)
6106 {
6107     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6108     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6109     uint64 ac_value = extract_ac_15_14(instruction);
6110 
6111     const char *ac = AC(ac_value, info);
6112     const char *rs = GPR(rs_value, info);
6113     const char *rt = GPR(rt_value, info);
6114 
6115     return img_format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6116 }
6117 
6118 
6119 /*
6120  *
6121  *
6122  *   3         2         1
6123  *  10987654321098765432109876543210
6124  *  001000               x1110000101
6125  *     rt -----
6126  *          rs -----
6127  *               rd -----
6128  */
6129 static char *DPAQX_SA_W_PH(uint64 instruction, Dis_info *info)
6130 {
6131     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6132     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6133     uint64 ac_value = extract_ac_15_14(instruction);
6134 
6135     const char *ac = AC(ac_value, info);
6136     const char *rs = GPR(rs_value, info);
6137     const char *rt = GPR(rt_value, info);
6138 
6139     return img_format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6140 }
6141 
6142 
6143 /*
6144  *
6145  *
6146  *   3         2         1
6147  *  10987654321098765432109876543210
6148  *  001000               x1110000101
6149  *     rt -----
6150  *          rs -----
6151  *               rd -----
6152  */
6153 static char *DPAQX_S_W_PH(uint64 instruction, Dis_info *info)
6154 {
6155     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6156     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6157     uint64 ac_value = extract_ac_15_14(instruction);
6158 
6159     const char *ac = AC(ac_value, info);
6160     const char *rs = GPR(rs_value, info);
6161     const char *rt = GPR(rt_value, info);
6162 
6163     return img_format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6164 }
6165 
6166 
6167 /*
6168  *
6169  *
6170  *   3         2         1
6171  *  10987654321098765432109876543210
6172  *  001000               x1110000101
6173  *     rt -----
6174  *          rs -----
6175  *               rd -----
6176  */
6177 static char *DPAU_H_QBL(uint64 instruction, Dis_info *info)
6178 {
6179     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6180     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6181     uint64 ac_value = extract_ac_15_14(instruction);
6182 
6183     const char *ac = AC(ac_value, info);
6184     const char *rs = GPR(rs_value, info);
6185     const char *rt = GPR(rt_value, info);
6186 
6187     return img_format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6188 }
6189 
6190 
6191 /*
6192  *
6193  *
6194  *   3         2         1
6195  *  10987654321098765432109876543210
6196  *  001000               x1110000101
6197  *     rt -----
6198  *          rs -----
6199  *               rd -----
6200  */
6201 static char *DPAU_H_QBR(uint64 instruction, Dis_info *info)
6202 {
6203     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6204     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6205     uint64 ac_value = extract_ac_15_14(instruction);
6206 
6207     const char *ac = AC(ac_value, info);
6208     const char *rs = GPR(rs_value, info);
6209     const char *rt = GPR(rt_value, info);
6210 
6211     return img_format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6212 }
6213 
6214 
6215 /*
6216  *
6217  *
6218  *   3         2         1
6219  *  10987654321098765432109876543210
6220  *  001000               x1110000101
6221  *     rt -----
6222  *          rs -----
6223  *               rd -----
6224  */
6225 static char *DPAX_W_PH(uint64 instruction, Dis_info *info)
6226 {
6227     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6228     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6229     uint64 ac_value = extract_ac_15_14(instruction);
6230 
6231     const char *ac = AC(ac_value, info);
6232     const char *rs = GPR(rs_value, info);
6233     const char *rt = GPR(rt_value, info);
6234 
6235     return img_format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6236 }
6237 
6238 
6239 /*
6240  *
6241  *
6242  *   3         2         1
6243  *  10987654321098765432109876543210
6244  *  001000               x1110000101
6245  *     rt -----
6246  *          rs -----
6247  *               rd -----
6248  */
6249 static char *DPS_W_PH(uint64 instruction, Dis_info *info)
6250 {
6251     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6252     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6253     uint64 ac_value = extract_ac_15_14(instruction);
6254 
6255     const char *ac = AC(ac_value, info);
6256     const char *rs = GPR(rs_value, info);
6257     const char *rt = GPR(rt_value, info);
6258 
6259     return img_format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6260 }
6261 
6262 
6263 /*
6264  *
6265  *
6266  *   3         2         1
6267  *  10987654321098765432109876543210
6268  *  001000               x1110000101
6269  *     rt -----
6270  *          rs -----
6271  *               rd -----
6272  */
6273 static char *DPSQ_SA_L_W(uint64 instruction, Dis_info *info)
6274 {
6275     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6276     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6277     uint64 ac_value = extract_ac_15_14(instruction);
6278 
6279     const char *ac = AC(ac_value, info);
6280     const char *rs = GPR(rs_value, info);
6281     const char *rt = GPR(rt_value, info);
6282 
6283     return img_format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6284 }
6285 
6286 
6287 /*
6288  *
6289  *
6290  *   3         2         1
6291  *  10987654321098765432109876543210
6292  *  001000               x1110000101
6293  *     rt -----
6294  *          rs -----
6295  *               rd -----
6296  */
6297 static char *DPSQ_S_W_PH(uint64 instruction, Dis_info *info)
6298 {
6299     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6300     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6301     uint64 ac_value = extract_ac_15_14(instruction);
6302 
6303     const char *ac = AC(ac_value, info);
6304     const char *rs = GPR(rs_value, info);
6305     const char *rt = GPR(rt_value, info);
6306 
6307     return img_format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6308 }
6309 
6310 
6311 /*
6312  *
6313  *
6314  *   3         2         1
6315  *  10987654321098765432109876543210
6316  *  001000               x1110000101
6317  *     rt -----
6318  *          rs -----
6319  *               rd -----
6320  */
6321 static char *DPSQX_SA_W_PH(uint64 instruction, Dis_info *info)
6322 {
6323     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6324     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6325     uint64 ac_value = extract_ac_15_14(instruction);
6326 
6327     const char *ac = AC(ac_value, info);
6328     const char *rs = GPR(rs_value, info);
6329     const char *rt = GPR(rt_value, info);
6330 
6331     return img_format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6332 }
6333 
6334 
6335 /*
6336  *
6337  *
6338  *   3         2         1
6339  *  10987654321098765432109876543210
6340  *  001000               x1110000101
6341  *     rt -----
6342  *          rs -----
6343  *               rd -----
6344  */
6345 static char *DPSQX_S_W_PH(uint64 instruction, Dis_info *info)
6346 {
6347     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6348     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6349     uint64 ac_value = extract_ac_15_14(instruction);
6350 
6351     const char *ac = AC(ac_value, info);
6352     const char *rs = GPR(rs_value, info);
6353     const char *rt = GPR(rt_value, info);
6354 
6355     return img_format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6356 }
6357 
6358 
6359 /*
6360  *
6361  *
6362  *   3         2         1
6363  *  10987654321098765432109876543210
6364  *  001000               x1110000101
6365  *     rt -----
6366  *          rs -----
6367  *               rd -----
6368  */
6369 static char *DPSU_H_QBL(uint64 instruction, Dis_info *info)
6370 {
6371     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6372     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6373     uint64 ac_value = extract_ac_15_14(instruction);
6374 
6375     const char *ac = AC(ac_value, info);
6376     const char *rs = GPR(rs_value, info);
6377     const char *rt = GPR(rt_value, info);
6378 
6379     return img_format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6380 }
6381 
6382 
6383 /*
6384  *
6385  *
6386  *   3         2         1
6387  *  10987654321098765432109876543210
6388  *  001000               x1110000101
6389  *     rt -----
6390  *          rs -----
6391  *               rd -----
6392  */
6393 static char *DPSU_H_QBR(uint64 instruction, Dis_info *info)
6394 {
6395     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6396     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6397     uint64 ac_value = extract_ac_15_14(instruction);
6398 
6399     const char *ac = AC(ac_value, info);
6400     const char *rs = GPR(rs_value, info);
6401     const char *rt = GPR(rt_value, info);
6402 
6403     return img_format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6404 }
6405 
6406 
6407 /*
6408  *
6409  *
6410  *   3         2         1
6411  *  10987654321098765432109876543210
6412  *  001000               x1110000101
6413  *     rt -----
6414  *          rs -----
6415  *               rd -----
6416  */
6417 static char *DPSX_W_PH(uint64 instruction, Dis_info *info)
6418 {
6419     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6420     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6421     uint64 ac_value = extract_ac_15_14(instruction);
6422 
6423     const char *ac = AC(ac_value, info);
6424     const char *rs = GPR(rs_value, info);
6425     const char *rt = GPR(rt_value, info);
6426 
6427     return img_format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6428 }
6429 
6430 
6431 /*
6432  * DROTR -
6433  *
6434  *   3         2         1
6435  *  10987654321098765432109876543210
6436  *  001000               x1110000101
6437  *     rt -----
6438  *          rs -----
6439  *               rd -----
6440  */
6441 static char *DROTR(uint64 instruction, Dis_info *info)
6442 {
6443     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6444     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6445     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6446 
6447     const char *rt = GPR(rt_value, info);
6448     const char *rs = GPR(rs_value, info);
6449 
6450     return img_format("DROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6451 }
6452 
6453 
6454 /*
6455  * DROTR[32] -
6456  *
6457  *   3         2         1
6458  *  10987654321098765432109876543210
6459  *  10o000          1100xxx0110
6460  *     rt -----
6461  *          rs -----
6462  *                       shift -----
6463  */
6464 static char *DROTR32(uint64 instruction, Dis_info *info)
6465 {
6466     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6467     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6468     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6469 
6470     const char *rt = GPR(rt_value, info);
6471     const char *rs = GPR(rs_value, info);
6472 
6473     return img_format("DROTR32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6474 }
6475 
6476 
6477 /*
6478  *
6479  *
6480  *   3         2         1
6481  *  10987654321098765432109876543210
6482  *  001000               x1110000101
6483  *     rt -----
6484  *          rs -----
6485  *               rd -----
6486  */
6487 static char *DROTRV(uint64 instruction, Dis_info *info)
6488 {
6489     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6490     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6491     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6492 
6493     const char *rd = GPR(rd_value, info);
6494     const char *rs = GPR(rs_value, info);
6495     const char *rt = GPR(rt_value, info);
6496 
6497     return img_format("DROTRV %s, %s, %s", rd, rs, rt);
6498 }
6499 
6500 
6501 /*
6502  *
6503  *
6504  *   3         2         1
6505  *  10987654321098765432109876543210
6506  *  001000               x1110000101
6507  *     rt -----
6508  *          rs -----
6509  *               rd -----
6510  */
6511 static char *DROTX(uint64 instruction, Dis_info *info)
6512 {
6513     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6514     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6515     uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6516     uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6517 
6518     const char *rt = GPR(rt_value, info);
6519     const char *rs = GPR(rs_value, info);
6520 
6521     return img_format("DROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6522                       rt, rs, shift_value, shiftx_value);
6523 }
6524 
6525 
6526 /*
6527  * DSLL -
6528  *
6529  *   3         2         1
6530  *  10987654321098765432109876543210
6531  *  10o000          1100xxx0000
6532  *     rt -----
6533  *          rs -----
6534  *                       shift -----
6535  */
6536 static char *DSLL(uint64 instruction, Dis_info *info)
6537 {
6538     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6539     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6540     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6541 
6542     const char *rt = GPR(rt_value, info);
6543     const char *rs = GPR(rs_value, info);
6544 
6545     return img_format("DSLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6546 }
6547 
6548 
6549 /*
6550  * DSLL[32] -
6551  *
6552  *   3         2         1
6553  *  10987654321098765432109876543210
6554  *  10o000          1100xxx0000
6555  *     rt -----
6556  *          rs -----
6557  *                       shift -----
6558  */
6559 static char *DSLL32(uint64 instruction, Dis_info *info)
6560 {
6561     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6562     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6563     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6564 
6565     const char *rt = GPR(rt_value, info);
6566     const char *rs = GPR(rs_value, info);
6567 
6568     return img_format("DSLL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6569 }
6570 
6571 
6572 /*
6573  *
6574  *
6575  *   3         2         1
6576  *  10987654321098765432109876543210
6577  *  001000               x1110000101
6578  *     rt -----
6579  *          rs -----
6580  *               rd -----
6581  */
6582 static char *DSLLV(uint64 instruction, Dis_info *info)
6583 {
6584     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6585     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6586     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6587 
6588     const char *rd = GPR(rd_value, info);
6589     const char *rs = GPR(rs_value, info);
6590     const char *rt = GPR(rt_value, info);
6591 
6592     return img_format("DSLLV %s, %s, %s", rd, rs, rt);
6593 }
6594 
6595 
6596 /*
6597  * DSRA -
6598  *
6599  *   3         2         1
6600  *  10987654321098765432109876543210
6601  *  10o000          1100xxx0100
6602  *     rt -----
6603  *          rs -----
6604  *                       shift -----
6605  */
6606 static char *DSRA(uint64 instruction, Dis_info *info)
6607 {
6608     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6609     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6610     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6611 
6612     const char *rt = GPR(rt_value, info);
6613     const char *rs = GPR(rs_value, info);
6614 
6615     return img_format("DSRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6616 }
6617 
6618 
6619 /*
6620  * DSRA[32] -
6621  *
6622  *   3         2         1
6623  *  10987654321098765432109876543210
6624  *  10o000          1100xxx0100
6625  *     rt -----
6626  *          rs -----
6627  *                       shift -----
6628  */
6629 static char *DSRA32(uint64 instruction, Dis_info *info)
6630 {
6631     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6632     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6633     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6634 
6635     const char *rt = GPR(rt_value, info);
6636     const char *rs = GPR(rs_value, info);
6637 
6638     return img_format("DSRA32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6639 }
6640 
6641 
6642 /*
6643  *
6644  *
6645  *   3         2         1
6646  *  10987654321098765432109876543210
6647  *  001000               x1110000101
6648  *     rt -----
6649  *          rs -----
6650  *               rd -----
6651  */
6652 static char *DSRAV(uint64 instruction, Dis_info *info)
6653 {
6654     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6655     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6656     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6657 
6658     const char *rd = GPR(rd_value, info);
6659     const char *rs = GPR(rs_value, info);
6660     const char *rt = GPR(rt_value, info);
6661 
6662     return img_format("DSRAV %s, %s, %s", rd, rs, rt);
6663 }
6664 
6665 
6666 /*
6667  * DSRL -
6668  *
6669  *   3         2         1
6670  *  10987654321098765432109876543210
6671  *  10o000          1100xxx0100
6672  *     rt -----
6673  *          rs -----
6674  *                       shift -----
6675  */
6676 static char *DSRL(uint64 instruction, Dis_info *info)
6677 {
6678     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6679     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6680     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6681 
6682     const char *rt = GPR(rt_value, info);
6683     const char *rs = GPR(rs_value, info);
6684 
6685     return img_format("DSRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6686 }
6687 
6688 
6689 /*
6690  * DSRL[32] -
6691  *
6692  *   3         2         1
6693  *  10987654321098765432109876543210
6694  *  10o000          1100xxx0010
6695  *     rt -----
6696  *          rs -----
6697  *                       shift -----
6698  */
6699 static char *DSRL32(uint64 instruction, Dis_info *info)
6700 {
6701     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6702     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6703     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6704 
6705     const char *rt = GPR(rt_value, info);
6706     const char *rs = GPR(rs_value, info);
6707 
6708     return img_format("DSRL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6709 }
6710 
6711 
6712 /*
6713  *
6714  *
6715  *   3         2         1
6716  *  10987654321098765432109876543210
6717  *  001000               x1110000101
6718  *     rt -----
6719  *          rs -----
6720  *               rd -----
6721  */
6722 static char *DSRLV(uint64 instruction, Dis_info *info)
6723 {
6724     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6725     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6726     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6727 
6728     const char *rd = GPR(rd_value, info);
6729     const char *rs = GPR(rs_value, info);
6730     const char *rt = GPR(rt_value, info);
6731 
6732     return img_format("DSRLV %s, %s, %s", rd, rs, rt);
6733 }
6734 
6735 
6736 /*
6737  *
6738  *
6739  *   3         2         1
6740  *  10987654321098765432109876543210
6741  *  001000               x1110000101
6742  *     rt -----
6743  *          rs -----
6744  *               rd -----
6745  */
6746 static char *DSUB(uint64 instruction, Dis_info *info)
6747 {
6748     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6749     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6750     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6751 
6752     const char *rd = GPR(rd_value, info);
6753     const char *rs = GPR(rs_value, info);
6754     const char *rt = GPR(rt_value, info);
6755 
6756     return img_format("DSUB %s, %s, %s", rd, rs, rt);
6757 }
6758 
6759 
6760 /*
6761  *
6762  *
6763  *   3         2         1
6764  *  10987654321098765432109876543210
6765  *  001000               x1110000101
6766  *     rt -----
6767  *          rs -----
6768  *               rd -----
6769  */
6770 static char *DSUBU(uint64 instruction, Dis_info *info)
6771 {
6772     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6773     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6774     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6775 
6776     const char *rd = GPR(rd_value, info);
6777     const char *rs = GPR(rs_value, info);
6778     const char *rt = GPR(rt_value, info);
6779 
6780     return img_format("DSUBU %s, %s, %s", rd, rs, rt);
6781 }
6782 
6783 
6784 /*
6785  *
6786  *
6787  *   3         2         1
6788  *  10987654321098765432109876543210
6789  *  001000               x1110000101
6790  *     rt -----
6791  *          rs -----
6792  *               rd -----
6793  */
6794 static char *DVPE(uint64 instruction, Dis_info *info)
6795 {
6796     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6797 
6798     const char *rt = GPR(rt_value, info);
6799 
6800     return img_format("DVPE %s", rt);
6801 }
6802 
6803 
6804 /*
6805  *
6806  *
6807  *   3         2         1
6808  *  10987654321098765432109876543210
6809  *  001000               x1110000101
6810  *     rt -----
6811  *          rs -----
6812  *               rd -----
6813  */
6814 static char *DVP(uint64 instruction, Dis_info *info)
6815 {
6816     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6817 
6818     const char *rt = GPR(rt_value, info);
6819 
6820     return img_format("DVP %s", rt);
6821 }
6822 
6823 
6824 /*
6825  *
6826  *
6827  *   3         2         1
6828  *  10987654321098765432109876543210
6829  *  001000               x1110000101
6830  *     rt -----
6831  *          rs -----
6832  *               rd -----
6833  */
6834 static char *EHB(uint64 instruction, Dis_info *info)
6835 {
6836     (void)instruction;
6837 
6838     return g_strdup("EHB ");
6839 }
6840 
6841 
6842 /*
6843  *
6844  *
6845  *   3         2         1
6846  *  10987654321098765432109876543210
6847  *  001000               x1110000101
6848  *     rt -----
6849  *          rs -----
6850  *               rd -----
6851  */
6852 static char *EI(uint64 instruction, Dis_info *info)
6853 {
6854     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6855 
6856     const char *rt = GPR(rt_value, info);
6857 
6858     return img_format("EI %s", rt);
6859 }
6860 
6861 
6862 /*
6863  *
6864  *
6865  *   3         2         1
6866  *  10987654321098765432109876543210
6867  *  001000               x1110000101
6868  *     rt -----
6869  *          rs -----
6870  *               rd -----
6871  */
6872 static char *EMT(uint64 instruction, Dis_info *info)
6873 {
6874     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6875 
6876     const char *rt = GPR(rt_value, info);
6877 
6878     return img_format("EMT %s", rt);
6879 }
6880 
6881 
6882 /*
6883  *
6884  *
6885  *   3         2         1
6886  *  10987654321098765432109876543210
6887  *  001000               x1110000101
6888  *     rt -----
6889  *          rs -----
6890  *               rd -----
6891  */
6892 static char *ERET(uint64 instruction, Dis_info *info)
6893 {
6894     (void)instruction;
6895 
6896     return g_strdup("ERET ");
6897 }
6898 
6899 
6900 /*
6901  *
6902  *
6903  *   3         2         1
6904  *  10987654321098765432109876543210
6905  *  001000               x1110000101
6906  *     rt -----
6907  *          rs -----
6908  *               rd -----
6909  */
6910 static char *ERETNC(uint64 instruction, Dis_info *info)
6911 {
6912     (void)instruction;
6913 
6914     return g_strdup("ERETNC ");
6915 }
6916 
6917 
6918 /*
6919  *
6920  *
6921  *   3         2         1
6922  *  10987654321098765432109876543210
6923  *  001000               x1110000101
6924  *     rt -----
6925  *          rs -----
6926  *               rd -----
6927  */
6928 static char *EVP(uint64 instruction, Dis_info *info)
6929 {
6930     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6931 
6932     const char *rt = GPR(rt_value, info);
6933 
6934     return img_format("EVP %s", rt);
6935 }
6936 
6937 
6938 /*
6939  *
6940  *
6941  *   3         2         1
6942  *  10987654321098765432109876543210
6943  *  001000               x1110000101
6944  *     rt -----
6945  *          rs -----
6946  *               rd -----
6947  */
6948 static char *EVPE(uint64 instruction, Dis_info *info)
6949 {
6950     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6951 
6952     const char *rt = GPR(rt_value, info);
6953 
6954     return img_format("EVPE %s", rt);
6955 }
6956 
6957 
6958 /*
6959  *
6960  *
6961  *   3         2         1
6962  *  10987654321098765432109876543210
6963  *  001000               x1110000101
6964  *     rt -----
6965  *          rs -----
6966  *               rd -----
6967  */
6968 static char *EXT(uint64 instruction, Dis_info *info)
6969 {
6970     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6971     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6972     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
6973     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
6974 
6975     const char *rt = GPR(rt_value, info);
6976     const char *rs = GPR(rs_value, info);
6977     uint64 msbd = encode_msbd_from_size(msbd_value);
6978 
6979     return img_format("EXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6980                       rt, rs, lsb_value, msbd);
6981 }
6982 
6983 
6984 /*
6985  *
6986  *
6987  *   3         2         1
6988  *  10987654321098765432109876543210
6989  *  001000               x1110000101
6990  *     rt -----
6991  *          rs -----
6992  *               rd -----
6993  */
6994 static char *EXTD(uint64 instruction, Dis_info *info)
6995 {
6996     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6997     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6998     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6999     uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7000 
7001     const char *rd = GPR(rd_value, info);
7002     const char *rs = GPR(rs_value, info);
7003     const char *rt = GPR(rt_value, info);
7004 
7005     return img_format("EXTD %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
7006 }
7007 
7008 
7009 /*
7010  *
7011  *
7012  *   3         2         1
7013  *  10987654321098765432109876543210
7014  *  001000               x1110000101
7015  *     rt -----
7016  *          rs -----
7017  *               rd -----
7018  */
7019 static char *EXTD32(uint64 instruction, Dis_info *info)
7020 {
7021     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7022     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7023     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7024     uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7025 
7026     const char *rd = GPR(rd_value, info);
7027     const char *rs = GPR(rs_value, info);
7028     const char *rt = GPR(rt_value, info);
7029 
7030     return img_format("EXTD32 %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
7031 }
7032 
7033 
7034 /*
7035  *
7036  *
7037  *   3         2         1
7038  *  10987654321098765432109876543210
7039  *  001000               x1110000101
7040  *     rt -----
7041  *          rs -----
7042  *               rd -----
7043  */
7044 static char *EXTPDP(uint64 instruction, Dis_info *info)
7045 {
7046     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7047     uint64 size_value = extract_size_20_19_18_17_16(instruction);
7048     uint64 ac_value = extract_ac_15_14(instruction);
7049 
7050     const char *rt = GPR(rt_value, info);
7051     const char *ac = AC(ac_value, info);
7052 
7053     return img_format("EXTPDP %s, %s, 0x%" PRIx64, rt, ac, size_value);
7054 }
7055 
7056 
7057 /*
7058  *
7059  *
7060  *   3         2         1
7061  *  10987654321098765432109876543210
7062  *  001000               x1110000101
7063  *     rt -----
7064  *          rs -----
7065  *               rd -----
7066  */
7067 static char *EXTPDPV(uint64 instruction, Dis_info *info)
7068 {
7069     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7070     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7071     uint64 ac_value = extract_ac_15_14(instruction);
7072 
7073     const char *rt = GPR(rt_value, info);
7074     const char *ac = AC(ac_value, info);
7075     const char *rs = GPR(rs_value, info);
7076 
7077     return img_format("EXTPDPV %s, %s, %s", rt, ac, rs);
7078 }
7079 
7080 
7081 /*
7082  *
7083  *
7084  *   3         2         1
7085  *  10987654321098765432109876543210
7086  *  001000               x1110000101
7087  *     rt -----
7088  *          rs -----
7089  *               rd -----
7090  */
7091 static char *EXTP(uint64 instruction, Dis_info *info)
7092 {
7093     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7094     uint64 size_value = extract_size_20_19_18_17_16(instruction);
7095     uint64 ac_value = extract_ac_15_14(instruction);
7096 
7097     const char *rt = GPR(rt_value, info);
7098     const char *ac = AC(ac_value, info);
7099 
7100     return img_format("EXTP %s, %s, 0x%" PRIx64, rt, ac, size_value);
7101 }
7102 
7103 
7104 /*
7105  *
7106  *
7107  *   3         2         1
7108  *  10987654321098765432109876543210
7109  *  001000               x1110000101
7110  *     rt -----
7111  *          rs -----
7112  *               rd -----
7113  */
7114 static char *EXTPV(uint64 instruction, Dis_info *info)
7115 {
7116     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7117     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7118     uint64 ac_value = extract_ac_15_14(instruction);
7119 
7120     const char *rt = GPR(rt_value, info);
7121     const char *ac = AC(ac_value, info);
7122     const char *rs = GPR(rs_value, info);
7123 
7124     return img_format("EXTPV %s, %s, %s", rt, ac, rs);
7125 }
7126 
7127 
7128 /*
7129  * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7130  *   with right shift
7131  *
7132  *   3         2         1
7133  *  10987654321098765432109876543210
7134  *  001000            10111001111111
7135  *     rt -----
7136  *       shift -----
7137  *               ac --
7138  */
7139 static char *EXTR_RS_W(uint64 instruction, Dis_info *info)
7140 {
7141     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7142     uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7143     uint64 ac_value = extract_ac_15_14(instruction);
7144 
7145     const char *rt = GPR(rt_value, info);
7146     const char *ac = AC(ac_value, info);
7147 
7148     return img_format("EXTR_RS.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7149 }
7150 
7151 
7152 /*
7153  * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7154  *   with right shift
7155  *
7156  *   3         2         1
7157  *  10987654321098765432109876543210
7158  *  001000            01111001111111
7159  *     rt -----
7160  *       shift -----
7161  *               ac --
7162  */
7163 static char *EXTR_R_W(uint64 instruction, Dis_info *info)
7164 {
7165     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7166     uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7167     uint64 ac_value = extract_ac_15_14(instruction);
7168 
7169     const char *rt = GPR(rt_value, info);
7170     const char *ac = AC(ac_value, info);
7171 
7172     return img_format("EXTR_R.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7173 }
7174 
7175 
7176 /*
7177  * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7178  *   to GPR with right shift and saturate
7179  *
7180  *   3         2         1
7181  *  10987654321098765432109876543210
7182  *  001000            11111001111111
7183  *     rt -----
7184  *       shift -----
7185  *               ac --
7186  */
7187 static char *EXTR_S_H(uint64 instruction, Dis_info *info)
7188 {
7189     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7190     uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7191     uint64 ac_value = extract_ac_15_14(instruction);
7192 
7193     const char *rt = GPR(rt_value, info);
7194     const char *ac = AC(ac_value, info);
7195 
7196     return img_format("EXTR_S.H %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7197 }
7198 
7199 
7200 /*
7201  * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7202  *   with right shift
7203  *
7204  *   3         2         1
7205  *  10987654321098765432109876543210
7206  *  001000            00111001111111
7207  *     rt -----
7208  *       shift -----
7209  *               ac --
7210  */
7211 static char *EXTR_W(uint64 instruction, Dis_info *info)
7212 {
7213     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7214     uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7215     uint64 ac_value = extract_ac_15_14(instruction);
7216 
7217     const char *rt = GPR(rt_value, info);
7218     const char *ac = AC(ac_value, info);
7219 
7220     return img_format("EXTR.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7221 }
7222 
7223 
7224 /*
7225  * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7226  *   right shift from accumulator to GPR
7227  *
7228  *   3         2         1
7229  *  10987654321098765432109876543210
7230  *  001000            10111010111111
7231  *     rt -----
7232  *          rs -----
7233  *               ac --
7234  */
7235 static char *EXTRV_RS_W(uint64 instruction, Dis_info *info)
7236 {
7237     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7238     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7239     uint64 ac_value = extract_ac_15_14(instruction);
7240 
7241     const char *rt = GPR(rt_value, info);
7242     const char *ac = AC(ac_value, info);
7243     const char *rs = GPR(rs_value, info);
7244 
7245     return img_format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7246 }
7247 
7248 
7249 /*
7250  * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7251  *   right shift from accumulator to GPR
7252  *
7253  *   3         2         1
7254  *  10987654321098765432109876543210
7255  *  001000            01111010111111
7256  *     rt -----
7257  *          rs -----
7258  *               ac --
7259  */
7260 static char *EXTRV_R_W(uint64 instruction, Dis_info *info)
7261 {
7262     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7263     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7264     uint64 ac_value = extract_ac_15_14(instruction);
7265 
7266     const char *rt = GPR(rt_value, info);
7267     const char *ac = AC(ac_value, info);
7268     const char *rs = GPR(rs_value, info);
7269 
7270     return img_format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7271 }
7272 
7273 
7274 /*
7275  * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7276  *   accumulator to GPR with right shift and saturate
7277  *
7278  *   3         2         1
7279  *  10987654321098765432109876543210
7280  *  001000            11111010111111
7281  *     rt -----
7282  *          rs -----
7283  *               ac --
7284  */
7285 static char *EXTRV_S_H(uint64 instruction, Dis_info *info)
7286 {
7287     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7288     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7289     uint64 ac_value = extract_ac_15_14(instruction);
7290 
7291     const char *rt = GPR(rt_value, info);
7292     const char *ac = AC(ac_value, info);
7293     const char *rs = GPR(rs_value, info);
7294 
7295     return img_format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7296 }
7297 
7298 
7299 /*
7300  * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7301  *   right shift from accumulator to GPR
7302  *
7303  *   3         2         1
7304  *  10987654321098765432109876543210
7305  *  001000            00111010111111
7306  *     rt -----
7307  *          rs -----
7308  *               ac --
7309  */
7310 static char *EXTRV_W(uint64 instruction, Dis_info *info)
7311 {
7312     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7313     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7314     uint64 ac_value = extract_ac_15_14(instruction);
7315 
7316     const char *rt = GPR(rt_value, info);
7317     const char *ac = AC(ac_value, info);
7318     const char *rs = GPR(rs_value, info);
7319 
7320     return img_format("EXTRV.W %s, %s, %s", rt, ac, rs);
7321 }
7322 
7323 
7324 /*
7325  * EXTW - Extract Word
7326  *
7327  *   3         2         1
7328  *  10987654321098765432109876543210
7329  *  001000                    011111
7330  *     rt -----
7331  *          rs -----
7332  *               rd -----
7333  *                 shift -----
7334  */
7335 static char *EXTW(uint64 instruction, Dis_info *info)
7336 {
7337     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7338     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7339     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7340     uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7341 
7342     const char *rd = GPR(rd_value, info);
7343     const char *rs = GPR(rs_value, info);
7344     const char *rt = GPR(rt_value, info);
7345 
7346     return img_format("EXTW %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
7347 }
7348 
7349 
7350 /*
7351  *
7352  *
7353  *   3         2         1
7354  *  10987654321098765432109876543210
7355  *  001000               x1110000101
7356  *     rt -----
7357  *          rs -----
7358  *               rd -----
7359  */
7360 static char *FLOOR_L_D(uint64 instruction, Dis_info *info)
7361 {
7362     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7363     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7364 
7365     const char *ft = FPR(ft_value, info);
7366     const char *fs = FPR(fs_value, info);
7367 
7368     return img_format("FLOOR.L.D %s, %s", ft, fs);
7369 }
7370 
7371 
7372 /*
7373  *
7374  *
7375  *   3         2         1
7376  *  10987654321098765432109876543210
7377  *  001000               x1110000101
7378  *     rt -----
7379  *          rs -----
7380  *               rd -----
7381  */
7382 static char *FLOOR_L_S(uint64 instruction, Dis_info *info)
7383 {
7384     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7385     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7386 
7387     const char *ft = FPR(ft_value, info);
7388     const char *fs = FPR(fs_value, info);
7389 
7390     return img_format("FLOOR.L.S %s, %s", ft, fs);
7391 }
7392 
7393 
7394 /*
7395  *
7396  *
7397  *   3         2         1
7398  *  10987654321098765432109876543210
7399  *  001000               x1110000101
7400  *     rt -----
7401  *          rs -----
7402  *               rd -----
7403  */
7404 static char *FLOOR_W_D(uint64 instruction, Dis_info *info)
7405 {
7406     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7407     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7408 
7409     const char *ft = FPR(ft_value, info);
7410     const char *fs = FPR(fs_value, info);
7411 
7412     return img_format("FLOOR.W.D %s, %s", ft, fs);
7413 }
7414 
7415 
7416 /*
7417  *
7418  *
7419  *   3         2         1
7420  *  10987654321098765432109876543210
7421  *  001000               x1110000101
7422  *     rt -----
7423  *          rs -----
7424  *               rd -----
7425  */
7426 static char *FLOOR_W_S(uint64 instruction, Dis_info *info)
7427 {
7428     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7429     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7430 
7431     const char *ft = FPR(ft_value, info);
7432     const char *fs = FPR(fs_value, info);
7433 
7434     return img_format("FLOOR.W.S %s, %s", ft, fs);
7435 }
7436 
7437 
7438 /*
7439  *
7440  *
7441  *   3         2         1
7442  *  10987654321098765432109876543210
7443  *  001000               x1110000101
7444  *     rt -----
7445  *          rs -----
7446  *               rd -----
7447  */
7448 static char *FORK(uint64 instruction, Dis_info *info)
7449 {
7450     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7451     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7452     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7453 
7454     const char *rd = GPR(rd_value, info);
7455     const char *rs = GPR(rs_value, info);
7456     const char *rt = GPR(rt_value, info);
7457 
7458     return img_format("FORK %s, %s, %s", rd, rs, rt);
7459 }
7460 
7461 
7462 /*
7463  *
7464  *
7465  *   3         2         1
7466  *  10987654321098765432109876543210
7467  *  001000               x1110000101
7468  *     rt -----
7469  *          rs -----
7470  *               rd -----
7471  */
7472 static char *HYPCALL(uint64 instruction, Dis_info *info)
7473 {
7474     uint64 code_value = extract_code_17_to_0(instruction);
7475 
7476 
7477     return img_format("HYPCALL 0x%" PRIx64, code_value);
7478 }
7479 
7480 
7481 /*
7482  *
7483  *
7484  *   3         2         1
7485  *  10987654321098765432109876543210
7486  *  001000               x1110000101
7487  *     rt -----
7488  *          rs -----
7489  *               rd -----
7490  */
7491 static char *HYPCALL_16_(uint64 instruction, Dis_info *info)
7492 {
7493     uint64 code_value = extract_code_1_0(instruction);
7494 
7495 
7496     return img_format("HYPCALL 0x%" PRIx64, code_value);
7497 }
7498 
7499 
7500 /*
7501  *
7502  *
7503  *   3         2         1
7504  *  10987654321098765432109876543210
7505  *  001000               x1110000101
7506  *     rt -----
7507  *          rs -----
7508  *               rd -----
7509  */
7510 static char *INS(uint64 instruction, Dis_info *info)
7511 {
7512     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7513     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7514     uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7515     uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7516 
7517     const char *rt = GPR(rt_value, info);
7518     const char *rs = GPR(rs_value, info);
7519     /* !!!!!!!!!! - no conversion function */
7520 
7521     return img_format("INS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
7522                       rt, rs, lsb_value, msbd_value);
7523     /* hand edited */
7524 }
7525 
7526 
7527 /*
7528  * [DSP] INSV rt, rs - Insert bit field variable
7529  *
7530  *   3         2         1
7531  *  10987654321098765432109876543210
7532  *  001000          0100000100111111
7533  *     rt -----
7534  *          rs -----
7535  */
7536 static char *INSV(uint64 instruction, Dis_info *info)
7537 {
7538     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7539     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7540 
7541     const char *rt = GPR(rt_value, info);
7542     const char *rs = GPR(rs_value, info);
7543 
7544     return img_format("INSV %s, %s", rt, rs);
7545 }
7546 
7547 
7548 /*
7549  *
7550  *
7551  *   3         2         1
7552  *  10987654321098765432109876543210
7553  *  001000               x1110000101
7554  *     rt -----
7555  *          rs -----
7556  *               rd -----
7557  */
7558 static char *IRET(uint64 instruction, Dis_info *info)
7559 {
7560     (void)instruction;
7561 
7562     return g_strdup("IRET ");
7563 }
7564 
7565 
7566 /*
7567  *
7568  *
7569  *   3         2         1
7570  *  10987654321098765432109876543210
7571  *  001000               x1110000101
7572  *     rt -----
7573  *          rs -----
7574  *               rd -----
7575  */
7576 static char *JALRC_16_(uint64 instruction, Dis_info *info)
7577 {
7578     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7579 
7580     const char *rt = GPR(rt_value, info);
7581 
7582     return img_format("JALRC $%d, %s", 31, rt);
7583 }
7584 
7585 
7586 /*
7587  *
7588  *
7589  *   3         2         1
7590  *  10987654321098765432109876543210
7591  *  001000               x1110000101
7592  *     rt -----
7593  *          rs -----
7594  *               rd -----
7595  */
7596 static char *JALRC_32_(uint64 instruction, Dis_info *info)
7597 {
7598     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7599     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7600 
7601     const char *rt = GPR(rt_value, info);
7602     const char *rs = GPR(rs_value, info);
7603 
7604     return img_format("JALRC %s, %s", rt, rs);
7605 }
7606 
7607 
7608 /*
7609  *
7610  *
7611  *   3         2         1
7612  *  10987654321098765432109876543210
7613  *  001000               x1110000101
7614  *     rt -----
7615  *          rs -----
7616  *               rd -----
7617  */
7618 static char *JALRC_HB(uint64 instruction, Dis_info *info)
7619 {
7620     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7621     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7622 
7623     const char *rt = GPR(rt_value, info);
7624     const char *rs = GPR(rs_value, info);
7625 
7626     return img_format("JALRC.HB %s, %s", rt, rs);
7627 }
7628 
7629 
7630 /*
7631  *
7632  *
7633  *   3         2         1
7634  *  10987654321098765432109876543210
7635  *  001000               x1110000101
7636  *     rt -----
7637  *          rs -----
7638  *               rd -----
7639  */
7640 static char *JRC(uint64 instruction, Dis_info *info)
7641 {
7642     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7643 
7644     const char *rt = GPR(rt_value, info);
7645 
7646     return img_format("JRC %s", rt);
7647 }
7648 
7649 
7650 /*
7651  *
7652  *
7653  *   3         2         1
7654  *  10987654321098765432109876543210
7655  *  001000               x1110000101
7656  *     rt -----
7657  *          rs -----
7658  *               rd -----
7659  */
7660 static char *LB_16_(uint64 instruction, Dis_info *info)
7661 {
7662     uint64 rt3_value = extract_rt3_9_8_7(instruction);
7663     uint64 rs3_value = extract_rs3_6_5_4(instruction);
7664     uint64 u_value = extract_u_1_0(instruction);
7665 
7666     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7667     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7668 
7669     return img_format("LB %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7670 }
7671 
7672 
7673 /*
7674  *
7675  *
7676  *   3         2         1
7677  *  10987654321098765432109876543210
7678  *  001000               x1110000101
7679  *     rt -----
7680  *          rs -----
7681  *               rd -----
7682  */
7683 static char *LB_GP_(uint64 instruction, Dis_info *info)
7684 {
7685     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7686     uint64 u_value = extract_u_17_to_0(instruction);
7687 
7688     const char *rt = GPR(rt_value, info);
7689 
7690     return img_format("LB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7691 }
7692 
7693 
7694 /*
7695  *
7696  *
7697  *   3         2         1
7698  *  10987654321098765432109876543210
7699  *  001000               x1110000101
7700  *     rt -----
7701  *          rs -----
7702  *               rd -----
7703  */
7704 static char *LB_S9_(uint64 instruction, Dis_info *info)
7705 {
7706     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7707     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7708     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7709 
7710     const char *rt = GPR(rt_value, info);
7711     const char *rs = GPR(rs_value, info);
7712 
7713     return img_format("LB %s, %" PRId64 "(%s)", rt, s_value, rs);
7714 }
7715 
7716 
7717 /*
7718  *
7719  *
7720  *   3         2         1
7721  *  10987654321098765432109876543210
7722  *  001000               x1110000101
7723  *     rt -----
7724  *          rs -----
7725  *               rd -----
7726  */
7727 static char *LB_U12_(uint64 instruction, Dis_info *info)
7728 {
7729     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7730     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7731     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7732 
7733     const char *rt = GPR(rt_value, info);
7734     const char *rs = GPR(rs_value, info);
7735 
7736     return img_format("LB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7737 }
7738 
7739 
7740 /*
7741  *
7742  *
7743  *   3         2         1
7744  *  10987654321098765432109876543210
7745  *  001000               x1110000101
7746  *     rt -----
7747  *          rs -----
7748  *               rd -----
7749  */
7750 static char *LBE(uint64 instruction, Dis_info *info)
7751 {
7752     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7753     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7754     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7755 
7756     const char *rt = GPR(rt_value, info);
7757     const char *rs = GPR(rs_value, info);
7758 
7759     return img_format("LBE %s, %" PRId64 "(%s)", rt, s_value, rs);
7760 }
7761 
7762 
7763 /*
7764  *
7765  *
7766  *   3         2         1
7767  *  10987654321098765432109876543210
7768  *  001000               x1110000101
7769  *     rt -----
7770  *          rs -----
7771  *               rd -----
7772  */
7773 static char *LBU_16_(uint64 instruction, Dis_info *info)
7774 {
7775     uint64 rt3_value = extract_rt3_9_8_7(instruction);
7776     uint64 rs3_value = extract_rs3_6_5_4(instruction);
7777     uint64 u_value = extract_u_1_0(instruction);
7778 
7779     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7780     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7781 
7782     return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7783 }
7784 
7785 
7786 /*
7787  *
7788  *
7789  *   3         2         1
7790  *  10987654321098765432109876543210
7791  *  001000               x1110000101
7792  *     rt -----
7793  *          rs -----
7794  *               rd -----
7795  */
7796 static char *LBU_GP_(uint64 instruction, Dis_info *info)
7797 {
7798     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7799     uint64 u_value = extract_u_17_to_0(instruction);
7800 
7801     const char *rt = GPR(rt_value, info);
7802 
7803     return img_format("LBU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7804 }
7805 
7806 
7807 /*
7808  *
7809  *
7810  *   3         2         1
7811  *  10987654321098765432109876543210
7812  *  001000               x1110000101
7813  *     rt -----
7814  *          rs -----
7815  *               rd -----
7816  */
7817 static char *LBU_S9_(uint64 instruction, Dis_info *info)
7818 {
7819     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7820     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7821     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7822 
7823     const char *rt = GPR(rt_value, info);
7824     const char *rs = GPR(rs_value, info);
7825 
7826     return img_format("LBU %s, %" PRId64 "(%s)", rt, s_value, rs);
7827 }
7828 
7829 
7830 /*
7831  *
7832  *
7833  *   3         2         1
7834  *  10987654321098765432109876543210
7835  *  001000               x1110000101
7836  *     rt -----
7837  *          rs -----
7838  *               rd -----
7839  */
7840 static char *LBU_U12_(uint64 instruction, Dis_info *info)
7841 {
7842     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7843     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7844     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7845 
7846     const char *rt = GPR(rt_value, info);
7847     const char *rs = GPR(rs_value, info);
7848 
7849     return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7850 }
7851 
7852 
7853 /*
7854  *
7855  *
7856  *   3         2         1
7857  *  10987654321098765432109876543210
7858  *  001000               x1110000101
7859  *     rt -----
7860  *          rs -----
7861  *               rd -----
7862  */
7863 static char *LBUE(uint64 instruction, Dis_info *info)
7864 {
7865     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7866     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7867     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7868 
7869     const char *rt = GPR(rt_value, info);
7870     const char *rs = GPR(rs_value, info);
7871 
7872     return img_format("LBUE %s, %" PRId64 "(%s)", rt, s_value, rs);
7873 }
7874 
7875 
7876 /*
7877  *
7878  *
7879  *   3         2         1
7880  *  10987654321098765432109876543210
7881  *  001000               x1110000101
7882  *     rt -----
7883  *          rs -----
7884  *               rd -----
7885  */
7886 static char *LBUX(uint64 instruction, Dis_info *info)
7887 {
7888     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7889     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7890     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7891 
7892     const char *rd = GPR(rd_value, info);
7893     const char *rs = GPR(rs_value, info);
7894     const char *rt = GPR(rt_value, info);
7895 
7896     return img_format("LBUX %s, %s(%s)", rd, rs, rt);
7897 }
7898 
7899 
7900 /*
7901  *
7902  *
7903  *   3         2         1
7904  *  10987654321098765432109876543210
7905  *  001000               x1110000101
7906  *     rt -----
7907  *          rs -----
7908  *               rd -----
7909  */
7910 static char *LBX(uint64 instruction, Dis_info *info)
7911 {
7912     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7913     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7914     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7915 
7916     const char *rd = GPR(rd_value, info);
7917     const char *rs = GPR(rs_value, info);
7918     const char *rt = GPR(rt_value, info);
7919 
7920     return img_format("LBX %s, %s(%s)", rd, rs, rt);
7921 }
7922 
7923 
7924 /*
7925  *
7926  *
7927  *   3         2         1
7928  *  10987654321098765432109876543210
7929  *  001000               x1110000101
7930  *     rt -----
7931  *          rs -----
7932  *               rd -----
7933  */
7934 static char *LD_GP_(uint64 instruction, Dis_info *info)
7935 {
7936     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7937     uint64 u_value = extract_u_20_to_3__s3(instruction);
7938 
7939     const char *rt = GPR(rt_value, info);
7940 
7941     return img_format("LD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7942 }
7943 
7944 
7945 /*
7946  *
7947  *
7948  *   3         2         1
7949  *  10987654321098765432109876543210
7950  *  001000               x1110000101
7951  *     rt -----
7952  *          rs -----
7953  *               rd -----
7954  */
7955 static char *LD_S9_(uint64 instruction, Dis_info *info)
7956 {
7957     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7958     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7959     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7960 
7961     const char *rt = GPR(rt_value, info);
7962     const char *rs = GPR(rs_value, info);
7963 
7964     return img_format("LD %s, %" PRId64 "(%s)", rt, s_value, rs);
7965 }
7966 
7967 
7968 /*
7969  *
7970  *
7971  *   3         2         1
7972  *  10987654321098765432109876543210
7973  *  001000               x1110000101
7974  *     rt -----
7975  *          rs -----
7976  *               rd -----
7977  */
7978 static char *LD_U12_(uint64 instruction, Dis_info *info)
7979 {
7980     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7981     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7982     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7983 
7984     const char *rt = GPR(rt_value, info);
7985     const char *rs = GPR(rs_value, info);
7986 
7987     return img_format("LD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7988 }
7989 
7990 
7991 /*
7992  *
7993  *
7994  *   3         2         1
7995  *  10987654321098765432109876543210
7996  *  001000               x1110000101
7997  *     rt -----
7998  *          rs -----
7999  *               rd -----
8000  */
8001 static char *LDC1_GP_(uint64 instruction, Dis_info *info)
8002 {
8003     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8004     uint64 u_value = extract_u_17_to_2__s2(instruction);
8005 
8006     const char *ft = FPR(ft_value, info);
8007 
8008     return img_format("LDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
8009 }
8010 
8011 
8012 /*
8013  *
8014  *
8015  *   3         2         1
8016  *  10987654321098765432109876543210
8017  *  001000               x1110000101
8018  *     rt -----
8019  *          rs -----
8020  *               rd -----
8021  */
8022 static char *LDC1_S9_(uint64 instruction, Dis_info *info)
8023 {
8024     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8025     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8026     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8027 
8028     const char *ft = FPR(ft_value, info);
8029     const char *rs = GPR(rs_value, info);
8030 
8031     return img_format("LDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
8032 }
8033 
8034 
8035 /*
8036  *
8037  *
8038  *   3         2         1
8039  *  10987654321098765432109876543210
8040  *  001000               x1110000101
8041  *     rt -----
8042  *          rs -----
8043  *               rd -----
8044  */
8045 static char *LDC1_U12_(uint64 instruction, Dis_info *info)
8046 {
8047     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8048     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8049     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8050 
8051     const char *ft = FPR(ft_value, info);
8052     const char *rs = GPR(rs_value, info);
8053 
8054     return img_format("LDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
8055 }
8056 
8057 
8058 /*
8059  *
8060  *
8061  *   3         2         1
8062  *  10987654321098765432109876543210
8063  *  001000               x1110000101
8064  *     rt -----
8065  *          rs -----
8066  *               rd -----
8067  */
8068 static char *LDC1XS(uint64 instruction, Dis_info *info)
8069 {
8070     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8071     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8072     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8073 
8074     const char *ft = FPR(ft_value, info);
8075     const char *rs = GPR(rs_value, info);
8076     const char *rt = GPR(rt_value, info);
8077 
8078     return img_format("LDC1XS %s, %s(%s)", ft, rs, rt);
8079 }
8080 
8081 
8082 /*
8083  *
8084  *
8085  *   3         2         1
8086  *  10987654321098765432109876543210
8087  *  001000               x1110000101
8088  *     rt -----
8089  *          rs -----
8090  *               rd -----
8091  */
8092 static char *LDC1X(uint64 instruction, Dis_info *info)
8093 {
8094     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8095     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8096     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8097 
8098     const char *ft = FPR(ft_value, info);
8099     const char *rs = GPR(rs_value, info);
8100     const char *rt = GPR(rt_value, info);
8101 
8102     return img_format("LDC1X %s, %s(%s)", ft, rs, rt);
8103 }
8104 
8105 
8106 /*
8107  *
8108  *
8109  *   3         2         1
8110  *  10987654321098765432109876543210
8111  *  001000               x1110000101
8112  *     rt -----
8113  *          rs -----
8114  *               rd -----
8115  */
8116 static char *LDC2(uint64 instruction, Dis_info *info)
8117 {
8118     uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8119     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8120     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8121 
8122     const char *rs = GPR(rs_value, info);
8123 
8124     return img_format("LDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
8125                       ct_value, s_value, rs);
8126 }
8127 
8128 
8129 /*
8130  *
8131  *
8132  *   3         2         1
8133  *  10987654321098765432109876543210
8134  *  001000               x1110000101
8135  *     rt -----
8136  *          rs -----
8137  *               rd -----
8138  */
8139 static char *LDM(uint64 instruction, Dis_info *info)
8140 {
8141     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8142     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8143     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8144     uint64 count3_value = extract_count3_14_13_12(instruction);
8145 
8146     const char *rt = GPR(rt_value, info);
8147     const char *rs = GPR(rs_value, info);
8148     uint64 count3 = encode_count3_from_count(count3_value);
8149 
8150     return img_format("LDM %s, %" PRId64 "(%s), 0x%" PRIx64,
8151                       rt, s_value, rs, count3);
8152 }
8153 
8154 
8155 /*
8156  *
8157  *
8158  *   3         2         1
8159  *  10987654321098765432109876543210
8160  *  001000               x1110000101
8161  *     rt -----
8162  *          rs -----
8163  *               rd -----
8164  */
8165 static char *LDPC_48_(uint64 instruction, Dis_info *info)
8166 {
8167     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8168     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8169 
8170     const char *rt = GPR(rt_value, info);
8171     g_autofree char *s = ADDRESS(s_value, 6, info);
8172 
8173     return img_format("LDPC %s, %s", rt, s);
8174 }
8175 
8176 
8177 /*
8178  *
8179  *
8180  *   3         2         1
8181  *  10987654321098765432109876543210
8182  *  001000               x1110000101
8183  *     rt -----
8184  *          rs -----
8185  *               rd -----
8186  */
8187 static char *LDX(uint64 instruction, Dis_info *info)
8188 {
8189     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8190     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8191     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8192 
8193     const char *rd = GPR(rd_value, info);
8194     const char *rs = GPR(rs_value, info);
8195     const char *rt = GPR(rt_value, info);
8196 
8197     return img_format("LDX %s, %s(%s)", rd, rs, rt);
8198 }
8199 
8200 
8201 /*
8202  *
8203  *
8204  *   3         2         1
8205  *  10987654321098765432109876543210
8206  *  001000               x1110000101
8207  *     rt -----
8208  *          rs -----
8209  *               rd -----
8210  */
8211 static char *LDXS(uint64 instruction, Dis_info *info)
8212 {
8213     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8214     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8215     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8216 
8217     const char *rd = GPR(rd_value, info);
8218     const char *rs = GPR(rs_value, info);
8219     const char *rt = GPR(rt_value, info);
8220 
8221     return img_format("LDXS %s, %s(%s)", rd, rs, rt);
8222 }
8223 
8224 
8225 /*
8226  *
8227  *
8228  *   3         2         1
8229  *  10987654321098765432109876543210
8230  *  001000               x1110000101
8231  *     rt -----
8232  *          rs -----
8233  *               rd -----
8234  */
8235 static char *LH_16_(uint64 instruction, Dis_info *info)
8236 {
8237     uint64 rt3_value = extract_rt3_9_8_7(instruction);
8238     uint64 rs3_value = extract_rs3_6_5_4(instruction);
8239     uint64 u_value = extract_u_2_1__s1(instruction);
8240 
8241     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8242     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8243 
8244     return img_format("LH %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8245 }
8246 
8247 
8248 /*
8249  *
8250  *
8251  *   3         2         1
8252  *  10987654321098765432109876543210
8253  *  001000               x1110000101
8254  *     rt -----
8255  *          rs -----
8256  *               rd -----
8257  */
8258 static char *LH_GP_(uint64 instruction, Dis_info *info)
8259 {
8260     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8261     uint64 u_value = extract_u_17_to_1__s1(instruction);
8262 
8263     const char *rt = GPR(rt_value, info);
8264 
8265     return img_format("LH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8266 }
8267 
8268 
8269 /*
8270  *
8271  *
8272  *   3         2         1
8273  *  10987654321098765432109876543210
8274  *  001000               x1110000101
8275  *     rt -----
8276  *          rs -----
8277  *               rd -----
8278  */
8279 static char *LH_S9_(uint64 instruction, Dis_info *info)
8280 {
8281     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8282     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8283     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8284 
8285     const char *rt = GPR(rt_value, info);
8286     const char *rs = GPR(rs_value, info);
8287 
8288     return img_format("LH %s, %" PRId64 "(%s)", rt, s_value, rs);
8289 }
8290 
8291 
8292 /*
8293  *
8294  *
8295  *   3         2         1
8296  *  10987654321098765432109876543210
8297  *  001000               x1110000101
8298  *     rt -----
8299  *          rs -----
8300  *               rd -----
8301  */
8302 static char *LH_U12_(uint64 instruction, Dis_info *info)
8303 {
8304     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8305     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8306     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8307 
8308     const char *rt = GPR(rt_value, info);
8309     const char *rs = GPR(rs_value, info);
8310 
8311     return img_format("LH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8312 }
8313 
8314 
8315 /*
8316  *
8317  *
8318  *   3         2         1
8319  *  10987654321098765432109876543210
8320  *  001000               x1110000101
8321  *     rt -----
8322  *          rs -----
8323  *               rd -----
8324  */
8325 static char *LHE(uint64 instruction, Dis_info *info)
8326 {
8327     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8328     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8329     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8330 
8331     const char *rt = GPR(rt_value, info);
8332     const char *rs = GPR(rs_value, info);
8333 
8334     return img_format("LHE %s, %" PRId64 "(%s)", rt, s_value, rs);
8335 }
8336 
8337 
8338 /*
8339  *
8340  *
8341  *   3         2         1
8342  *  10987654321098765432109876543210
8343  *  001000               x1110000101
8344  *     rt -----
8345  *          rs -----
8346  *               rd -----
8347  */
8348 static char *LHU_16_(uint64 instruction, Dis_info *info)
8349 {
8350     uint64 rt3_value = extract_rt3_9_8_7(instruction);
8351     uint64 rs3_value = extract_rs3_6_5_4(instruction);
8352     uint64 u_value = extract_u_2_1__s1(instruction);
8353 
8354     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8355     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8356 
8357     return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8358 }
8359 
8360 
8361 /*
8362  *
8363  *
8364  *   3         2         1
8365  *  10987654321098765432109876543210
8366  *  001000               x1110000101
8367  *     rt -----
8368  *          rs -----
8369  *               rd -----
8370  */
8371 static char *LHU_GP_(uint64 instruction, Dis_info *info)
8372 {
8373     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8374     uint64 u_value = extract_u_17_to_1__s1(instruction);
8375 
8376     const char *rt = GPR(rt_value, info);
8377 
8378     return img_format("LHU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8379 }
8380 
8381 
8382 /*
8383  *
8384  *
8385  *   3         2         1
8386  *  10987654321098765432109876543210
8387  *  001000               x1110000101
8388  *     rt -----
8389  *          rs -----
8390  *               rd -----
8391  */
8392 static char *LHU_S9_(uint64 instruction, Dis_info *info)
8393 {
8394     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8395     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8396     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8397 
8398     const char *rt = GPR(rt_value, info);
8399     const char *rs = GPR(rs_value, info);
8400 
8401     return img_format("LHU %s, %" PRId64 "(%s)", rt, s_value, rs);
8402 }
8403 
8404 
8405 /*
8406  *
8407  *
8408  *   3         2         1
8409  *  10987654321098765432109876543210
8410  *  001000               x1110000101
8411  *     rt -----
8412  *          rs -----
8413  *               rd -----
8414  */
8415 static char *LHU_U12_(uint64 instruction, Dis_info *info)
8416 {
8417     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8418     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8419     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8420 
8421     const char *rt = GPR(rt_value, info);
8422     const char *rs = GPR(rs_value, info);
8423 
8424     return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8425 }
8426 
8427 
8428 /*
8429  *
8430  *
8431  *   3         2         1
8432  *  10987654321098765432109876543210
8433  *  001000               x1110000101
8434  *     rt -----
8435  *          rs -----
8436  *               rd -----
8437  */
8438 static char *LHUE(uint64 instruction, Dis_info *info)
8439 {
8440     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8441     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8442     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8443 
8444     const char *rt = GPR(rt_value, info);
8445     const char *rs = GPR(rs_value, info);
8446 
8447     return img_format("LHUE %s, %" PRId64 "(%s)", rt, s_value, rs);
8448 }
8449 
8450 
8451 /*
8452  *
8453  *
8454  *   3         2         1
8455  *  10987654321098765432109876543210
8456  *  001000               x1110000101
8457  *     rt -----
8458  *          rs -----
8459  *               rd -----
8460  */
8461 static char *LHUX(uint64 instruction, Dis_info *info)
8462 {
8463     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8464     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8465     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8466 
8467     const char *rd = GPR(rd_value, info);
8468     const char *rs = GPR(rs_value, info);
8469     const char *rt = GPR(rt_value, info);
8470 
8471     return img_format("LHUX %s, %s(%s)", rd, rs, rt);
8472 }
8473 
8474 
8475 /*
8476  *
8477  *
8478  *   3         2         1
8479  *  10987654321098765432109876543210
8480  *  001000               x1110000101
8481  *     rt -----
8482  *          rs -----
8483  *               rd -----
8484  */
8485 static char *LHUXS(uint64 instruction, Dis_info *info)
8486 {
8487     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8488     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8489     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8490 
8491     const char *rd = GPR(rd_value, info);
8492     const char *rs = GPR(rs_value, info);
8493     const char *rt = GPR(rt_value, info);
8494 
8495     return img_format("LHUXS %s, %s(%s)", rd, rs, rt);
8496 }
8497 
8498 
8499 /*
8500  *
8501  *
8502  *   3         2         1
8503  *  10987654321098765432109876543210
8504  *  001000               x1110000101
8505  *     rt -----
8506  *          rs -----
8507  *               rd -----
8508  */
8509 static char *LHXS(uint64 instruction, Dis_info *info)
8510 {
8511     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8512     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8513     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8514 
8515     const char *rd = GPR(rd_value, info);
8516     const char *rs = GPR(rs_value, info);
8517     const char *rt = GPR(rt_value, info);
8518 
8519     return img_format("LHXS %s, %s(%s)", rd, rs, rt);
8520 }
8521 
8522 
8523 /*
8524  *
8525  *
8526  *   3         2         1
8527  *  10987654321098765432109876543210
8528  *  001000               x1110000101
8529  *     rt -----
8530  *          rs -----
8531  *               rd -----
8532  */
8533 static char *LHX(uint64 instruction, Dis_info *info)
8534 {
8535     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8536     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8537     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8538 
8539     const char *rd = GPR(rd_value, info);
8540     const char *rs = GPR(rs_value, info);
8541     const char *rt = GPR(rt_value, info);
8542 
8543     return img_format("LHX %s, %s(%s)", rd, rs, rt);
8544 }
8545 
8546 
8547 /*
8548  *
8549  *
8550  *   3         2         1
8551  *  10987654321098765432109876543210
8552  *  001000               x1110000101
8553  *     rt -----
8554  *          rs -----
8555  *               rd -----
8556  */
8557 static char *LI_16_(uint64 instruction, Dis_info *info)
8558 {
8559     uint64 rt3_value = extract_rt3_9_8_7(instruction);
8560     uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8561 
8562     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8563     int64 eu = encode_eu_from_s_li16(eu_value);
8564 
8565     return img_format("LI %s, %" PRId64, rt3, eu);
8566 }
8567 
8568 
8569 /*
8570  *
8571  *
8572  *   3         2         1
8573  *  10987654321098765432109876543210
8574  *  001000               x1110000101
8575  *     rt -----
8576  *          rs -----
8577  *               rd -----
8578  */
8579 static char *LI_48_(uint64 instruction, Dis_info *info)
8580 {
8581     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8582     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8583 
8584     const char *rt = GPR(rt_value, info);
8585 
8586     return img_format("LI %s, %" PRId64, rt, s_value);
8587 }
8588 
8589 
8590 /*
8591  *
8592  *
8593  *   3         2         1
8594  *  10987654321098765432109876543210
8595  *  001000               x1110000101
8596  *     rt -----
8597  *          rs -----
8598  *               rd -----
8599  */
8600 static char *LL(uint64 instruction, Dis_info *info)
8601 {
8602     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8603     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8604     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8605 
8606     const char *rt = GPR(rt_value, info);
8607     const char *rs = GPR(rs_value, info);
8608 
8609     return img_format("LL %s, %" PRId64 "(%s)", rt, s_value, rs);
8610 }
8611 
8612 
8613 /*
8614  *
8615  *
8616  *   3         2         1
8617  *  10987654321098765432109876543210
8618  *  001000               x1110000101
8619  *     rt -----
8620  *          rs -----
8621  *               rd -----
8622  */
8623 static char *LLD(uint64 instruction, Dis_info *info)
8624 {
8625     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8626     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8627     int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8628 
8629     const char *rt = GPR(rt_value, info);
8630     const char *rs = GPR(rs_value, info);
8631 
8632     return img_format("LLD %s, %" PRId64 "(%s)", rt, s_value, rs);
8633 }
8634 
8635 
8636 /*
8637  *
8638  *
8639  *   3         2         1
8640  *  10987654321098765432109876543210
8641  *  001000               x1110000101
8642  *     rt -----
8643  *          rs -----
8644  *               rd -----
8645  */
8646 static char *LLDP(uint64 instruction, Dis_info *info)
8647 {
8648     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8649     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8650     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8651 
8652     const char *rt = GPR(rt_value, info);
8653     const char *ru = GPR(ru_value, info);
8654     const char *rs = GPR(rs_value, info);
8655 
8656     return img_format("LLDP %s, %s, (%s)", rt, ru, rs);
8657 }
8658 
8659 
8660 /*
8661  *
8662  *
8663  *   3         2         1
8664  *  10987654321098765432109876543210
8665  *  001000               x1110000101
8666  *     rt -----
8667  *          rs -----
8668  *               rd -----
8669  */
8670 static char *LLE(uint64 instruction, Dis_info *info)
8671 {
8672     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8673     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8674     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8675 
8676     const char *rt = GPR(rt_value, info);
8677     const char *rs = GPR(rs_value, info);
8678 
8679     return img_format("LLE %s, %" PRId64 "(%s)", rt, s_value, rs);
8680 }
8681 
8682 
8683 /*
8684  *
8685  *
8686  *   3         2         1
8687  *  10987654321098765432109876543210
8688  *  001000               x1110000101
8689  *     rt -----
8690  *          rs -----
8691  *               rd -----
8692  */
8693 static char *LLWP(uint64 instruction, Dis_info *info)
8694 {
8695     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8696     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8697     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8698 
8699     const char *rt = GPR(rt_value, info);
8700     const char *ru = GPR(ru_value, info);
8701     const char *rs = GPR(rs_value, info);
8702 
8703     return img_format("LLWP %s, %s, (%s)", rt, ru, rs);
8704 }
8705 
8706 
8707 /*
8708  *
8709  *
8710  *   3         2         1
8711  *  10987654321098765432109876543210
8712  *  001000               x1110000101
8713  *     rt -----
8714  *          rs -----
8715  *               rd -----
8716  */
8717 static char *LLWPE(uint64 instruction, Dis_info *info)
8718 {
8719     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8720     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8721     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8722 
8723     const char *rt = GPR(rt_value, info);
8724     const char *ru = GPR(ru_value, info);
8725     const char *rs = GPR(rs_value, info);
8726 
8727     return img_format("LLWPE %s, %s, (%s)", rt, ru, rs);
8728 }
8729 
8730 
8731 /*
8732  *
8733  *
8734  *   3         2         1
8735  *  10987654321098765432109876543210
8736  *  001000               x1110000101
8737  *     rt -----
8738  *          rs -----
8739  *               rd -----
8740  */
8741 static char *LSA(uint64 instruction, Dis_info *info)
8742 {
8743     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8744     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8745     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8746     uint64 u2_value = extract_u2_10_9(instruction);
8747 
8748     const char *rd = GPR(rd_value, info);
8749     const char *rs = GPR(rs_value, info);
8750     const char *rt = GPR(rt_value, info);
8751 
8752     return img_format("LSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
8753 }
8754 
8755 
8756 /*
8757  *
8758  *
8759  *   3         2         1
8760  *  10987654321098765432109876543210
8761  *  001000               x1110000101
8762  *     rt -----
8763  *          rs -----
8764  *               rd -----
8765  */
8766 static char *LUI(uint64 instruction, Dis_info *info)
8767 {
8768     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8769     int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
8770 
8771     const char *rt = GPR(rt_value, info);
8772 
8773     return img_format("LUI %s, %%hi(%" PRId64 ")", rt, s_value);
8774 }
8775 
8776 
8777 /*
8778  *
8779  *
8780  *   3         2         1
8781  *  10987654321098765432109876543210
8782  *  001000               x1110000101
8783  *     rt -----
8784  *          rs -----
8785  *               rd -----
8786  */
8787 static char *LW_16_(uint64 instruction, Dis_info *info)
8788 {
8789     uint64 rt3_value = extract_rt3_9_8_7(instruction);
8790     uint64 rs3_value = extract_rs3_6_5_4(instruction);
8791     uint64 u_value = extract_u_3_2_1_0__s2(instruction);
8792 
8793     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8794     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8795 
8796     return img_format("LW %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8797 }
8798 
8799 
8800 /*
8801  *
8802  *
8803  *   3         2         1
8804  *  10987654321098765432109876543210
8805  *  001000               x1110000101
8806  *     rt -----
8807  *          rs -----
8808  *               rd -----
8809  */
8810 static char *LW_4X4_(uint64 instruction, Dis_info *info)
8811 {
8812     uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
8813     uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
8814     uint64 u_value = extract_u_3_8__s2(instruction);
8815 
8816     const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
8817     const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
8818 
8819     return img_format("LW %s, 0x%" PRIx64 "(%s)", rt4, u_value, rs4);
8820 }
8821 
8822 
8823 /*
8824  *
8825  *
8826  *   3         2         1
8827  *  10987654321098765432109876543210
8828  *  001000               x1110000101
8829  *     rt -----
8830  *          rs -----
8831  *               rd -----
8832  */
8833 static char *LW_GP_(uint64 instruction, Dis_info *info)
8834 {
8835     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8836     uint64 u_value = extract_u_20_to_2__s2(instruction);
8837 
8838     const char *rt = GPR(rt_value, info);
8839 
8840     return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8841 }
8842 
8843 
8844 /*
8845  *
8846  *
8847  *   3         2         1
8848  *  10987654321098765432109876543210
8849  *  001000               x1110000101
8850  *     rt -----
8851  *          rs -----
8852  *               rd -----
8853  */
8854 static char *LW_GP16_(uint64 instruction, Dis_info *info)
8855 {
8856     uint64 rt3_value = extract_rt3_9_8_7(instruction);
8857     uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
8858 
8859     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8860 
8861     return img_format("LW %s, 0x%" PRIx64 "($%d)", rt3, u_value, 28);
8862 }
8863 
8864 
8865 /*
8866  *
8867  *
8868  *   3         2         1
8869  *  10987654321098765432109876543210
8870  *  001000               x1110000101
8871  *     rt -----
8872  *          rs -----
8873  *               rd -----
8874  */
8875 static char *LW_S9_(uint64 instruction, Dis_info *info)
8876 {
8877     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8878     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8879     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8880 
8881     const char *rt = GPR(rt_value, info);
8882     const char *rs = GPR(rs_value, info);
8883 
8884     return img_format("LW %s, %" PRId64 "(%s)", rt, s_value, rs);
8885 }
8886 
8887 
8888 /*
8889  *
8890  *
8891  *   3         2         1
8892  *  10987654321098765432109876543210
8893  *  001000               x1110000101
8894  *     rt -----
8895  *          rs -----
8896  *               rd -----
8897  */
8898 static char *LW_SP_(uint64 instruction, Dis_info *info)
8899 {
8900     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
8901     uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
8902 
8903     const char *rt = GPR(rt_value, info);
8904 
8905     return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
8906 }
8907 
8908 
8909 /*
8910  *
8911  *
8912  *   3         2         1
8913  *  10987654321098765432109876543210
8914  *  001000               x1110000101
8915  *     rt -----
8916  *          rs -----
8917  *               rd -----
8918  */
8919 static char *LW_U12_(uint64 instruction, Dis_info *info)
8920 {
8921     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8922     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8923     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8924 
8925     const char *rt = GPR(rt_value, info);
8926     const char *rs = GPR(rs_value, info);
8927 
8928     return img_format("LW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8929 }
8930 
8931 
8932 /*
8933  *
8934  *
8935  *   3         2         1
8936  *  10987654321098765432109876543210
8937  *  001000               x1110000101
8938  *     rt -----
8939  *          rs -----
8940  *               rd -----
8941  */
8942 static char *LWC1_GP_(uint64 instruction, Dis_info *info)
8943 {
8944     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8945     uint64 u_value = extract_u_17_to_2__s2(instruction);
8946 
8947     const char *ft = FPR(ft_value, info);
8948 
8949     return img_format("LWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
8950 }
8951 
8952 
8953 /*
8954  *
8955  *
8956  *   3         2         1
8957  *  10987654321098765432109876543210
8958  *  001000               x1110000101
8959  *     rt -----
8960  *          rs -----
8961  *               rd -----
8962  */
8963 static char *LWC1_S9_(uint64 instruction, Dis_info *info)
8964 {
8965     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8966     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8967     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8968 
8969     const char *ft = FPR(ft_value, info);
8970     const char *rs = GPR(rs_value, info);
8971 
8972     return img_format("LWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
8973 }
8974 
8975 
8976 /*
8977  *
8978  *
8979  *   3         2         1
8980  *  10987654321098765432109876543210
8981  *  001000               x1110000101
8982  *     rt -----
8983  *          rs -----
8984  *               rd -----
8985  */
8986 static char *LWC1_U12_(uint64 instruction, Dis_info *info)
8987 {
8988     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8989     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8990     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8991 
8992     const char *ft = FPR(ft_value, info);
8993     const char *rs = GPR(rs_value, info);
8994 
8995     return img_format("LWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
8996 }
8997 
8998 
8999 /*
9000  *
9001  *
9002  *   3         2         1
9003  *  10987654321098765432109876543210
9004  *  001000               x1110000101
9005  *     rt -----
9006  *          rs -----
9007  *               rd -----
9008  */
9009 static char *LWC1X(uint64 instruction, Dis_info *info)
9010 {
9011     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9012     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9013     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9014 
9015     const char *ft = FPR(ft_value, info);
9016     const char *rs = GPR(rs_value, info);
9017     const char *rt = GPR(rt_value, info);
9018 
9019     return img_format("LWC1X %s, %s(%s)", ft, rs, rt);
9020 }
9021 
9022 
9023 /*
9024  *
9025  *
9026  *   3         2         1
9027  *  10987654321098765432109876543210
9028  *  001000               x1110000101
9029  *     rt -----
9030  *          rs -----
9031  *               rd -----
9032  */
9033 static char *LWC1XS(uint64 instruction, Dis_info *info)
9034 {
9035     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9036     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9037     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9038 
9039     const char *ft = FPR(ft_value, info);
9040     const char *rs = GPR(rs_value, info);
9041     const char *rt = GPR(rt_value, info);
9042 
9043     return img_format("LWC1XS %s, %s(%s)", ft, rs, rt);
9044 }
9045 
9046 
9047 /*
9048  *
9049  *
9050  *   3         2         1
9051  *  10987654321098765432109876543210
9052  *  001000               x1110000101
9053  *     rt -----
9054  *          rs -----
9055  *               rd -----
9056  */
9057 static char *LWC2(uint64 instruction, Dis_info *info)
9058 {
9059     uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9060     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9061     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9062 
9063     const char *rs = GPR(rs_value, info);
9064 
9065     return img_format("LWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
9066                       ct_value, s_value, rs);
9067 }
9068 
9069 
9070 /*
9071  *
9072  *
9073  *   3         2         1
9074  *  10987654321098765432109876543210
9075  *  001000               x1110000101
9076  *     rt -----
9077  *          rs -----
9078  *               rd -----
9079  */
9080 static char *LWE(uint64 instruction, Dis_info *info)
9081 {
9082     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9083     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9084     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9085 
9086     const char *rt = GPR(rt_value, info);
9087     const char *rs = GPR(rs_value, info);
9088 
9089     return img_format("LWE %s, %" PRId64 "(%s)", rt, s_value, rs);
9090 }
9091 
9092 
9093 /*
9094  *
9095  *
9096  *   3         2         1
9097  *  10987654321098765432109876543210
9098  *  001000               x1110000101
9099  *     rt -----
9100  *          rs -----
9101  *               rd -----
9102  */
9103 static char *LWM(uint64 instruction, Dis_info *info)
9104 {
9105     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9106     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9107     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9108     uint64 count3_value = extract_count3_14_13_12(instruction);
9109 
9110     const char *rt = GPR(rt_value, info);
9111     const char *rs = GPR(rs_value, info);
9112     uint64 count3 = encode_count3_from_count(count3_value);
9113 
9114     return img_format("LWM %s, %" PRId64 "(%s), 0x%" PRIx64,
9115                       rt, s_value, rs, count3);
9116 }
9117 
9118 
9119 /*
9120  *
9121  *
9122  *   3         2         1
9123  *  10987654321098765432109876543210
9124  *  001000               x1110000101
9125  *     rt -----
9126  *          rs -----
9127  *               rd -----
9128  */
9129 static char *LWPC_48_(uint64 instruction, Dis_info *info)
9130 {
9131     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9132     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9133 
9134     const char *rt = GPR(rt_value, info);
9135     g_autofree char *s = ADDRESS(s_value, 6, info);
9136 
9137     return img_format("LWPC %s, %s", rt, s);
9138 }
9139 
9140 
9141 /*
9142  *
9143  *
9144  *   3         2         1
9145  *  10987654321098765432109876543210
9146  *  001000               x1110000101
9147  *     rt -----
9148  *          rs -----
9149  *               rd -----
9150  */
9151 static char *LWU_GP_(uint64 instruction, Dis_info *info)
9152 {
9153     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9154     uint64 u_value = extract_u_17_to_2__s2(instruction);
9155 
9156     const char *rt = GPR(rt_value, info);
9157 
9158     return img_format("LWU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
9159 }
9160 
9161 
9162 /*
9163  *
9164  *
9165  *   3         2         1
9166  *  10987654321098765432109876543210
9167  *  001000               x1110000101
9168  *     rt -----
9169  *          rs -----
9170  *               rd -----
9171  */
9172 static char *LWU_S9_(uint64 instruction, Dis_info *info)
9173 {
9174     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9175     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9176     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9177 
9178     const char *rt = GPR(rt_value, info);
9179     const char *rs = GPR(rs_value, info);
9180 
9181     return img_format("LWU %s, %" PRId64 "(%s)", rt, s_value, rs);
9182 }
9183 
9184 
9185 /*
9186  *
9187  *
9188  *   3         2         1
9189  *  10987654321098765432109876543210
9190  *  001000               x1110000101
9191  *     rt -----
9192  *          rs -----
9193  *               rd -----
9194  */
9195 static char *LWU_U12_(uint64 instruction, Dis_info *info)
9196 {
9197     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9198     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9199     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9200 
9201     const char *rt = GPR(rt_value, info);
9202     const char *rs = GPR(rs_value, info);
9203 
9204     return img_format("LWU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
9205 }
9206 
9207 
9208 /*
9209  *
9210  *
9211  *   3         2         1
9212  *  10987654321098765432109876543210
9213  *  001000               x1110000101
9214  *     rt -----
9215  *          rs -----
9216  *               rd -----
9217  */
9218 static char *LWUX(uint64 instruction, Dis_info *info)
9219 {
9220     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9221     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9222     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9223 
9224     const char *rd = GPR(rd_value, info);
9225     const char *rs = GPR(rs_value, info);
9226     const char *rt = GPR(rt_value, info);
9227 
9228     return img_format("LWUX %s, %s(%s)", rd, rs, rt);
9229 }
9230 
9231 
9232 /*
9233  *
9234  *
9235  *   3         2         1
9236  *  10987654321098765432109876543210
9237  *  001000               x1110000101
9238  *     rt -----
9239  *          rs -----
9240  *               rd -----
9241  */
9242 static char *LWUXS(uint64 instruction, Dis_info *info)
9243 {
9244     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9245     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9246     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9247 
9248     const char *rd = GPR(rd_value, info);
9249     const char *rs = GPR(rs_value, info);
9250     const char *rt = GPR(rt_value, info);
9251 
9252     return img_format("LWUXS %s, %s(%s)", rd, rs, rt);
9253 }
9254 
9255 
9256 /*
9257  *
9258  *
9259  *   3         2         1
9260  *  10987654321098765432109876543210
9261  *  001000               x1110000101
9262  *     rt -----
9263  *          rs -----
9264  *               rd -----
9265  */
9266 static char *LWX(uint64 instruction, Dis_info *info)
9267 {
9268     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9269     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9270     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9271 
9272     const char *rd = GPR(rd_value, info);
9273     const char *rs = GPR(rs_value, info);
9274     const char *rt = GPR(rt_value, info);
9275 
9276     return img_format("LWX %s, %s(%s)", rd, rs, rt);
9277 }
9278 
9279 
9280 /*
9281  *
9282  *
9283  *   3         2         1
9284  *  10987654321098765432109876543210
9285  *  001000               x1110000101
9286  *     rt -----
9287  *          rs -----
9288  *               rd -----
9289  */
9290 static char *LWXS_16_(uint64 instruction, Dis_info *info)
9291 {
9292     uint64 rt3_value = extract_rt3_9_8_7(instruction);
9293     uint64 rs3_value = extract_rs3_6_5_4(instruction);
9294     uint64 rd3_value = extract_rd3_3_2_1(instruction);
9295 
9296     const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
9297     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
9298     uint64 rt3 = decode_gpr_gpr3(rt3_value, info);
9299 
9300     return img_format("LWXS %s, %s(0x%" PRIx64 ")", rd3, rs3, rt3);
9301 }
9302 
9303 
9304 /*
9305  *
9306  *
9307  *   3         2         1
9308  *  10987654321098765432109876543210
9309  *  001000               x1110000101
9310  *     rt -----
9311  *          rs -----
9312  *               rd -----
9313  */
9314 static char *LWXS_32_(uint64 instruction, Dis_info *info)
9315 {
9316     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9317     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9318     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9319 
9320     const char *rd = GPR(rd_value, info);
9321     const char *rs = GPR(rs_value, info);
9322     const char *rt = GPR(rt_value, info);
9323 
9324     return img_format("LWXS %s, %s(%s)", rd, rs, rt);
9325 }
9326 
9327 
9328 /*
9329  * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9330  *         accumulator
9331  *
9332  *   3         2         1
9333  *  10987654321098765432109876543210
9334  *  001000               x1110000101
9335  *     rt -----
9336  *          rs -----
9337  *               rd -----
9338  */
9339 static char *MADD_DSP_(uint64 instruction, Dis_info *info)
9340 {
9341     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9342     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9343     uint64 ac_value = extract_ac_15_14(instruction);
9344 
9345     const char *ac = AC(ac_value, info);
9346     const char *rs = GPR(rs_value, info);
9347     const char *rt = GPR(rt_value, info);
9348 
9349     return img_format("MADD %s, %s, %s", ac, rs, rt);
9350 }
9351 
9352 
9353 /*
9354  *
9355  *
9356  *   3         2         1
9357  *  10987654321098765432109876543210
9358  *  001000               x1110000101
9359  *     rt -----
9360  *          rs -----
9361  *               rd -----
9362  */
9363 static char *MADDF_D(uint64 instruction, Dis_info *info)
9364 {
9365     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9366     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9367     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9368 
9369     const char *fd = FPR(fd_value, info);
9370     const char *fs = FPR(fs_value, info);
9371     const char *ft = FPR(ft_value, info);
9372 
9373     return img_format("MADDF.D %s, %s, %s", fd, fs, ft);
9374 }
9375 
9376 
9377 /*
9378  *
9379  *
9380  *   3         2         1
9381  *  10987654321098765432109876543210
9382  *  001000               x1110000101
9383  *     rt -----
9384  *          rs -----
9385  *               rd -----
9386  */
9387 static char *MADDF_S(uint64 instruction, Dis_info *info)
9388 {
9389     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9390     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9391     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9392 
9393     const char *fd = FPR(fd_value, info);
9394     const char *fs = FPR(fs_value, info);
9395     const char *ft = FPR(ft_value, info);
9396 
9397     return img_format("MADDF.S %s, %s, %s", fd, fs, ft);
9398 }
9399 
9400 
9401 /*
9402  * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9403  *         specified accumulator
9404  *
9405  *   3         2         1
9406  *  10987654321098765432109876543210
9407  *  001000               x1110000101
9408  *     rt -----
9409  *          rs -----
9410  *               rd -----
9411  */
9412 static char *MADDU_DSP_(uint64 instruction, Dis_info *info)
9413 {
9414     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9415     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9416     uint64 ac_value = extract_ac_15_14(instruction);
9417 
9418     const char *ac = AC(ac_value, info);
9419     const char *rs = GPR(rs_value, info);
9420     const char *rt = GPR(rt_value, info);
9421 
9422     return img_format("MADDU %s, %s, %s", ac, rs, rt);
9423 }
9424 
9425 
9426 /*
9427  * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9428  *         fractional halfword elements with accumulation
9429  *
9430  *   3         2         1
9431  *  10987654321098765432109876543210
9432  *  001000               x1110000101
9433  *     rt -----
9434  *          rs -----
9435  *               rd -----
9436  */
9437 static char *MAQ_S_W_PHL(uint64 instruction, Dis_info *info)
9438 {
9439     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9440     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9441     uint64 ac_value = extract_ac_15_14(instruction);
9442 
9443     const char *ac = AC(ac_value, info);
9444     const char *rs = GPR(rs_value, info);
9445     const char *rt = GPR(rt_value, info);
9446 
9447     return img_format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9448 }
9449 
9450 
9451 /*
9452  * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9453  *         fractional halfword elements with accumulation
9454  *
9455  *   3         2         1
9456  *  10987654321098765432109876543210
9457  *  001000               x1110000101
9458  *     rt -----
9459  *          rs -----
9460  *               rd -----
9461  */
9462 static char *MAQ_S_W_PHR(uint64 instruction, Dis_info *info)
9463 {
9464     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9465     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9466     uint64 ac_value = extract_ac_15_14(instruction);
9467 
9468     const char *ac = AC(ac_value, info);
9469     const char *rs = GPR(rs_value, info);
9470     const char *rt = GPR(rt_value, info);
9471 
9472     return img_format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9473 }
9474 
9475 
9476 /*
9477  * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9478  *         fractional halfword elements with saturating accumulation
9479  *
9480  *   3         2         1
9481  *  10987654321098765432109876543210
9482  *  001000               x1110000101
9483  *     rt -----
9484  *          rs -----
9485  *               rd -----
9486  */
9487 static char *MAQ_SA_W_PHL(uint64 instruction, Dis_info *info)
9488 {
9489     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9490     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9491     uint64 ac_value = extract_ac_15_14(instruction);
9492 
9493     const char *ac = AC(ac_value, info);
9494     const char *rs = GPR(rs_value, info);
9495     const char *rt = GPR(rt_value, info);
9496 
9497     return img_format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9498 }
9499 
9500 
9501 /*
9502  * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9503  *         fractional halfword elements with saturating accumulation
9504  *
9505  *   3         2         1
9506  *  10987654321098765432109876543210
9507  *  001000               x1110000101
9508  *     rt -----
9509  *          rs -----
9510  *               rd -----
9511  */
9512 static char *MAQ_SA_W_PHR(uint64 instruction, Dis_info *info)
9513 {
9514     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9515     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9516     uint64 ac_value = extract_ac_15_14(instruction);
9517 
9518     const char *ac = AC(ac_value, info);
9519     const char *rs = GPR(rs_value, info);
9520     const char *rt = GPR(rt_value, info);
9521 
9522     return img_format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9523 }
9524 
9525 
9526 /*
9527  *
9528  *
9529  *   3         2         1
9530  *  10987654321098765432109876543210
9531  *  001000               x1110000101
9532  *     rt -----
9533  *          rs -----
9534  *               rd -----
9535  */
9536 static char *MAX_D(uint64 instruction, Dis_info *info)
9537 {
9538     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9539     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9540     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9541 
9542     const char *fd = FPR(fd_value, info);
9543     const char *fs = FPR(fs_value, info);
9544     const char *ft = FPR(ft_value, info);
9545 
9546     return img_format("MAX.D %s, %s, %s", fd, fs, ft);
9547 }
9548 
9549 
9550 /*
9551  *
9552  *
9553  *   3         2         1
9554  *  10987654321098765432109876543210
9555  *  001000               x1110000101
9556  *     rt -----
9557  *          rs -----
9558  *               rd -----
9559  */
9560 static char *MAX_S(uint64 instruction, Dis_info *info)
9561 {
9562     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9563     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9564     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9565 
9566     const char *fd = FPR(fd_value, info);
9567     const char *fs = FPR(fs_value, info);
9568     const char *ft = FPR(ft_value, info);
9569 
9570     return img_format("MAX.S %s, %s, %s", fd, fs, ft);
9571 }
9572 
9573 
9574 /*
9575  *
9576  *
9577  *   3         2         1
9578  *  10987654321098765432109876543210
9579  *  001000               x1110000101
9580  *     rt -----
9581  *          rs -----
9582  *               rd -----
9583  */
9584 static char *MAXA_D(uint64 instruction, Dis_info *info)
9585 {
9586     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9587     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9588     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9589 
9590     const char *fd = FPR(fd_value, info);
9591     const char *fs = FPR(fs_value, info);
9592     const char *ft = FPR(ft_value, info);
9593 
9594     return img_format("MAXA.D %s, %s, %s", fd, fs, ft);
9595 }
9596 
9597 
9598 /*
9599  *
9600  *
9601  *   3         2         1
9602  *  10987654321098765432109876543210
9603  *  001000               x1110000101
9604  *     rt -----
9605  *          rs -----
9606  *               rd -----
9607  */
9608 static char *MAXA_S(uint64 instruction, Dis_info *info)
9609 {
9610     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9611     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9612     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9613 
9614     const char *fd = FPR(fd_value, info);
9615     const char *fs = FPR(fs_value, info);
9616     const char *ft = FPR(ft_value, info);
9617 
9618     return img_format("MAXA.S %s, %s, %s", fd, fs, ft);
9619 }
9620 
9621 
9622 /*
9623  *
9624  *
9625  *   3         2         1
9626  *  10987654321098765432109876543210
9627  *  001000               x1110000101
9628  *     rt -----
9629  *          rs -----
9630  *               rd -----
9631  */
9632 static char *MFC0(uint64 instruction, Dis_info *info)
9633 {
9634     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9635     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9636     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9637 
9638     const char *rt = GPR(rt_value, info);
9639 
9640     return img_format("MFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9641                       rt, c0s_value, sel_value);
9642 }
9643 
9644 
9645 /*
9646  *
9647  *
9648  *   3         2         1
9649  *  10987654321098765432109876543210
9650  *  001000               x1110000101
9651  *     rt -----
9652  *          rs -----
9653  *               rd -----
9654  */
9655 static char *MFC1(uint64 instruction, Dis_info *info)
9656 {
9657     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9658     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9659 
9660     const char *rt = GPR(rt_value, info);
9661     const char *fs = FPR(fs_value, info);
9662 
9663     return img_format("MFC1 %s, %s", rt, fs);
9664 }
9665 
9666 
9667 /*
9668  *
9669  *
9670  *   3         2         1
9671  *  10987654321098765432109876543210
9672  *  001000               x1110000101
9673  *     rt -----
9674  *          rs -----
9675  *               rd -----
9676  */
9677 static char *MFC2(uint64 instruction, Dis_info *info)
9678 {
9679     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9680     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9681 
9682     const char *rt = GPR(rt_value, info);
9683 
9684     return img_format("MFC2 %s, CP%" PRIu64, rt, cs_value);
9685 }
9686 
9687 
9688 /*
9689  *
9690  *
9691  *   3         2         1
9692  *  10987654321098765432109876543210
9693  *  001000               x1110000101
9694  *     rt -----
9695  *          rs -----
9696  *               rd -----
9697  */
9698 static char *MFGC0(uint64 instruction, Dis_info *info)
9699 {
9700     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9701     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9702     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9703 
9704     const char *rt = GPR(rt_value, info);
9705 
9706     return img_format("MFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9707                       rt, c0s_value, sel_value);
9708 }
9709 
9710 
9711 /*
9712  *
9713  *
9714  *   3         2         1
9715  *  10987654321098765432109876543210
9716  *  001000               x1110000101
9717  *     rt -----
9718  *          rs -----
9719  *               rd -----
9720  */
9721 static char *MFHC0(uint64 instruction, Dis_info *info)
9722 {
9723     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9724     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9725     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9726 
9727     const char *rt = GPR(rt_value, info);
9728 
9729     return img_format("MFHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9730                       rt, c0s_value, sel_value);
9731 }
9732 
9733 
9734 /*
9735  *
9736  *
9737  *   3         2         1
9738  *  10987654321098765432109876543210
9739  *  001000               x1110000101
9740  *     rt -----
9741  *          rs -----
9742  *               rd -----
9743  */
9744 static char *MFHC1(uint64 instruction, Dis_info *info)
9745 {
9746     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9747     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9748 
9749     const char *rt = GPR(rt_value, info);
9750     const char *fs = FPR(fs_value, info);
9751 
9752     return img_format("MFHC1 %s, %s", rt, fs);
9753 }
9754 
9755 
9756 /*
9757  *
9758  *
9759  *   3         2         1
9760  *  10987654321098765432109876543210
9761  *  001000               x1110000101
9762  *     rt -----
9763  *          rs -----
9764  *               rd -----
9765  */
9766 static char *MFHC2(uint64 instruction, Dis_info *info)
9767 {
9768     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9769     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9770 
9771     const char *rt = GPR(rt_value, info);
9772 
9773     return img_format("MFHC2 %s, CP%" PRIu64, rt, cs_value);
9774 }
9775 
9776 
9777 /*
9778  *
9779  *
9780  *   3         2         1
9781  *  10987654321098765432109876543210
9782  *  001000               x1110000101
9783  *     rt -----
9784  *          rs -----
9785  *               rd -----
9786  */
9787 static char *MFHGC0(uint64 instruction, Dis_info *info)
9788 {
9789     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9790     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9791     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9792 
9793     const char *rt = GPR(rt_value, info);
9794 
9795     return img_format("MFHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9796                       rt, c0s_value, sel_value);
9797 }
9798 
9799 
9800 /*
9801  * [DSP] MFHI rs, ac - Move from HI register
9802  *
9803  *   3         2         1
9804  *  10987654321098765432109876543210
9805  *  001000     xxxxx  00000001111111
9806  *     rt -----
9807  *               ac --
9808  */
9809 static char *MFHI_DSP_(uint64 instruction, Dis_info *info)
9810 {
9811     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9812     uint64 ac_value = extract_ac_15_14(instruction);
9813 
9814     const char *rt = GPR(rt_value, info);
9815     const char *ac = AC(ac_value, info);
9816 
9817     return img_format("MFHI %s, %s", rt, ac);
9818 }
9819 
9820 
9821 /*
9822  *
9823  *
9824  *   3         2         1
9825  *  10987654321098765432109876543210
9826  *  001000               x1110000101
9827  *     rt -----
9828  *          rs -----
9829  *               rd -----
9830  */
9831 static char *MFHTR(uint64 instruction, Dis_info *info)
9832 {
9833     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9834     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9835     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9836     uint64 u_value = extract_u_10(instruction);
9837 
9838     const char *rt = GPR(rt_value, info);
9839 
9840     return img_format("MFHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9841                       rt, c0s_value, u_value, sel_value);
9842 }
9843 
9844 
9845 /*
9846  * [DSP] MFLO rs, ac - Move from HI register
9847  *
9848  *   3         2         1
9849  *  10987654321098765432109876543210
9850  *  001000     xxxxx  01000001111111
9851  *     rt -----
9852  *               ac --
9853  */
9854 static char *MFLO_DSP_(uint64 instruction, Dis_info *info)
9855 {
9856     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9857     uint64 ac_value = extract_ac_15_14(instruction);
9858 
9859     const char *rt = GPR(rt_value, info);
9860     const char *ac = AC(ac_value, info);
9861 
9862     return img_format("MFLO %s, %s", rt, ac);
9863 }
9864 
9865 
9866 /*
9867  *
9868  *
9869  *   3         2         1
9870  *  10987654321098765432109876543210
9871  *  001000               x1110000101
9872  *     rt -----
9873  *          rs -----
9874  *               rd -----
9875  */
9876 static char *MFTR(uint64 instruction, Dis_info *info)
9877 {
9878     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9879     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9880     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9881     uint64 u_value = extract_u_10(instruction);
9882 
9883     const char *rt = GPR(rt_value, info);
9884 
9885     return img_format("MFTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9886                       rt, c0s_value, u_value, sel_value);
9887 }
9888 
9889 
9890 /*
9891  *
9892  *
9893  *   3         2         1
9894  *  10987654321098765432109876543210
9895  *  001000               x1110000101
9896  *     rt -----
9897  *          rs -----
9898  *               rd -----
9899  */
9900 static char *MIN_D(uint64 instruction, Dis_info *info)
9901 {
9902     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9903     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9904     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9905 
9906     const char *fd = FPR(fd_value, info);
9907     const char *fs = FPR(fs_value, info);
9908     const char *ft = FPR(ft_value, info);
9909 
9910     return img_format("MIN.D %s, %s, %s", fd, fs, ft);
9911 }
9912 
9913 
9914 /*
9915  *
9916  *
9917  *   3         2         1
9918  *  10987654321098765432109876543210
9919  *  001000               x1110000101
9920  *     rt -----
9921  *          rs -----
9922  *               rd -----
9923  */
9924 static char *MIN_S(uint64 instruction, Dis_info *info)
9925 {
9926     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9927     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9928     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9929 
9930     const char *fd = FPR(fd_value, info);
9931     const char *fs = FPR(fs_value, info);
9932     const char *ft = FPR(ft_value, info);
9933 
9934     return img_format("MIN.S %s, %s, %s", fd, fs, ft);
9935 }
9936 
9937 
9938 /*
9939  *
9940  *
9941  *   3         2         1
9942  *  10987654321098765432109876543210
9943  *  001000               x1110000101
9944  *     rt -----
9945  *          rs -----
9946  *               rd -----
9947  */
9948 static char *MINA_D(uint64 instruction, Dis_info *info)
9949 {
9950     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9951     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9952     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9953 
9954     const char *fd = FPR(fd_value, info);
9955     const char *fs = FPR(fs_value, info);
9956     const char *ft = FPR(ft_value, info);
9957 
9958     return img_format("MINA.D %s, %s, %s", fd, fs, ft);
9959 }
9960 
9961 
9962 /*
9963  *
9964  *
9965  *   3         2         1
9966  *  10987654321098765432109876543210
9967  *  001000               x1110000101
9968  *     rt -----
9969  *          rs -----
9970  *               rd -----
9971  */
9972 static char *MINA_S(uint64 instruction, Dis_info *info)
9973 {
9974     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9975     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9976     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9977 
9978     const char *fd = FPR(fd_value, info);
9979     const char *fs = FPR(fs_value, info);
9980     const char *ft = FPR(ft_value, info);
9981 
9982     return img_format("MINA.S %s, %s, %s", fd, fs, ft);
9983 }
9984 
9985 
9986 /*
9987  *
9988  *
9989  *   3         2         1
9990  *  10987654321098765432109876543210
9991  *  001000               x1110000101
9992  *     rt -----
9993  *          rs -----
9994  *               rd -----
9995  */
9996 static char *MOD(uint64 instruction, Dis_info *info)
9997 {
9998     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9999     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10000     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10001 
10002     const char *rd = GPR(rd_value, info);
10003     const char *rs = GPR(rs_value, info);
10004     const char *rt = GPR(rt_value, info);
10005 
10006     return img_format("MOD %s, %s, %s", rd, rs, rt);
10007 }
10008 
10009 
10010 /*
10011  * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
10012  *
10013  *   3         2         1
10014  *  10987654321098765432109876543210
10015  *  001000               x1110000101
10016  *     rt -----
10017  *          rs -----
10018  *               rd -----
10019  */
10020 static char *MODSUB(uint64 instruction, Dis_info *info)
10021 {
10022     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10023     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10024     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10025 
10026     const char *rd = GPR(rd_value, info);
10027     const char *rs = GPR(rs_value, info);
10028     const char *rt = GPR(rt_value, info);
10029 
10030     return img_format("MODSUB %s, %s, %s", rd, rs, rt);
10031 }
10032 
10033 
10034 /*
10035  *
10036  *
10037  *   3         2         1
10038  *  10987654321098765432109876543210
10039  *  001000               x1010010101
10040  *     rt -----
10041  *          rs -----
10042  *               rd -----
10043  */
10044 static char *MODU(uint64 instruction, Dis_info *info)
10045 {
10046     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10047     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10048     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10049 
10050     const char *rd = GPR(rd_value, info);
10051     const char *rs = GPR(rs_value, info);
10052     const char *rt = GPR(rt_value, info);
10053 
10054     return img_format("MODU %s, %s, %s", rd, rs, rt);
10055 }
10056 
10057 
10058 /*
10059  *
10060  *
10061  *   3         2         1
10062  *  10987654321098765432109876543210
10063  *  001000               x1110000101
10064  *     rt -----
10065  *          rs -----
10066  *               rd -----
10067  */
10068 static char *MOV_D(uint64 instruction, Dis_info *info)
10069 {
10070     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10071     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10072 
10073     const char *ft = FPR(ft_value, info);
10074     const char *fs = FPR(fs_value, info);
10075 
10076     return img_format("MOV.D %s, %s", ft, fs);
10077 }
10078 
10079 
10080 /*
10081  *
10082  *
10083  *   3         2         1
10084  *  10987654321098765432109876543210
10085  *  001000               x1110000101
10086  *     rt -----
10087  *          rs -----
10088  *               rd -----
10089  */
10090 static char *MOV_S(uint64 instruction, Dis_info *info)
10091 {
10092     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10093     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10094 
10095     const char *ft = FPR(ft_value, info);
10096     const char *fs = FPR(fs_value, info);
10097 
10098     return img_format("MOV.S %s, %s", ft, fs);
10099 }
10100 
10101 
10102 /*
10103  *
10104  *
10105  *   3         2         1
10106  *  10987654321098765432109876543210
10107  *  001000               x1110000101
10108  *     rt -----
10109  *          rs -----
10110  *               rd -----
10111  */
10112 static char *MOVE_BALC(uint64 instruction, Dis_info *info)
10113 {
10114     uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10115     uint64 rd1_value = extract_rdl_25_24(instruction);
10116     int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10117 
10118     const char *rd1 = GPR(decode_gpr_gpr1(rd1_value, info), info);
10119     const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10120     g_autofree char *s = ADDRESS(s_value, 4, info);
10121 
10122     return img_format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10123 }
10124 
10125 
10126 /*
10127  *
10128  *
10129  *   3         2         1
10130  *  10987654321098765432109876543210
10131  *  001000               x1110000101
10132  *     rt -----
10133  *          rs -----
10134  *               rd -----
10135  */
10136 static char *MOVEP(uint64 instruction, Dis_info *info)
10137 {
10138     uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10139     uint64 rd2_value = extract_rd2_3_8(instruction);
10140     uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10141 
10142     const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10143     const char *re2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10144     /* !!!!!!!!!! - no conversion function */
10145     const char *rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value, info), info);
10146     const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10147 
10148     return img_format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10149     /* hand edited */
10150 }
10151 
10152 
10153 /*
10154  *
10155  *
10156  *   3         2         1
10157  *  10987654321098765432109876543210
10158  *  001000               x1110000101
10159  *     rt -----
10160  *          rs -----
10161  *               rd -----
10162  */
10163 static char *MOVEP_REV_(uint64 instruction, Dis_info *info)
10164 {
10165     uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10166     uint64 rd2_value = extract_rd2_3_8(instruction);
10167     uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10168 
10169     const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10170     const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10171     const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10172     const char *rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10173     /* !!!!!!!!!! - no conversion function */
10174 
10175     return img_format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10176     /* hand edited */
10177 }
10178 
10179 
10180 /*
10181  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10182  *
10183  *   3         2         1
10184  *  10987654321098765432109876543210
10185  *  001000               00010001101
10186  *     rt -----
10187  *          rs -----
10188  *               rd -----
10189  */
10190 static char *MOVE(uint64 instruction, Dis_info *info)
10191 {
10192     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10193     uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10194 
10195     const char *rt = GPR(rt_value, info);
10196     const char *rs = GPR(rs_value, info);
10197 
10198     return img_format("MOVE %s, %s", rt, rs);
10199 }
10200 
10201 
10202 /*
10203  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10204  *
10205  *   3         2         1
10206  *  10987654321098765432109876543210
10207  *  001000               00010001101
10208  *     rt -----
10209  *          rs -----
10210  *               rd -----
10211  */
10212 static char *MOVN(uint64 instruction, Dis_info *info)
10213 {
10214     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10215     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10216     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10217 
10218     const char *rd = GPR(rd_value, info);
10219     const char *rs = GPR(rs_value, info);
10220     const char *rt = GPR(rt_value, info);
10221 
10222     return img_format("MOVN %s, %s, %s", rd, rs, rt);
10223 }
10224 
10225 
10226 /*
10227  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10228  *
10229  *   3         2         1
10230  *  10987654321098765432109876543210
10231  *  001000               00010001101
10232  *     rt -----
10233  *          rs -----
10234  *               rd -----
10235  */
10236 static char *MOVZ(uint64 instruction, Dis_info *info)
10237 {
10238     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10239     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10240     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10241 
10242     const char *rd = GPR(rd_value, info);
10243     const char *rs = GPR(rs_value, info);
10244     const char *rt = GPR(rt_value, info);
10245 
10246     return img_format("MOVZ %s, %s, %s", rd, rs, rt);
10247 }
10248 
10249 
10250 /*
10251  * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10252  *
10253  *   3         2         1
10254  *  10987654321098765432109876543210
10255  *  001000            10101010111111
10256  *     rt -----
10257  *          rs -----
10258  *               ac --
10259  */
10260 static char *MSUB_DSP_(uint64 instruction, Dis_info *info)
10261 {
10262     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10263     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10264     uint64 ac_value = extract_ac_15_14(instruction);
10265 
10266     const char *ac = AC(ac_value, info);
10267     const char *rs = GPR(rs_value, info);
10268     const char *rt = GPR(rt_value, info);
10269 
10270     return img_format("MSUB %s, %s, %s", ac, rs, rt);
10271 }
10272 
10273 
10274 /*
10275  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10276  *
10277  *   3         2         1
10278  *  10987654321098765432109876543210
10279  *  001000               00010001101
10280  *     rt -----
10281  *          rs -----
10282  *               rd -----
10283  */
10284 static char *MSUBF_D(uint64 instruction, Dis_info *info)
10285 {
10286     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10287     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10288     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10289 
10290     const char *fd = FPR(fd_value, info);
10291     const char *fs = FPR(fs_value, info);
10292     const char *ft = FPR(ft_value, info);
10293 
10294     return img_format("MSUBF.D %s, %s, %s", fd, fs, ft);
10295 }
10296 
10297 
10298 /*
10299  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10300  *
10301  *   3         2         1
10302  *  10987654321098765432109876543210
10303  *  001000               00010001101
10304  *     rt -----
10305  *          rs -----
10306  *               rd -----
10307  */
10308 static char *MSUBF_S(uint64 instruction, Dis_info *info)
10309 {
10310     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10311     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10312     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10313 
10314     const char *fd = FPR(fd_value, info);
10315     const char *fs = FPR(fs_value, info);
10316     const char *ft = FPR(ft_value, info);
10317 
10318     return img_format("MSUBF.S %s, %s, %s", fd, fs, ft);
10319 }
10320 
10321 
10322 /*
10323  * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10324  *
10325  *   3         2         1
10326  *  10987654321098765432109876543210
10327  *  001000            11101010111111
10328  *     rt -----
10329  *          rs -----
10330  *               ac --
10331  */
10332 static char *MSUBU_DSP_(uint64 instruction, Dis_info *info)
10333 {
10334     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10335     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10336     uint64 ac_value = extract_ac_15_14(instruction);
10337 
10338     const char *ac = AC(ac_value, info);
10339     const char *rs = GPR(rs_value, info);
10340     const char *rt = GPR(rt_value, info);
10341 
10342     return img_format("MSUBU %s, %s, %s", ac, rs, rt);
10343 }
10344 
10345 
10346 /*
10347  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10348  *
10349  *   3         2         1
10350  *  10987654321098765432109876543210
10351  *  001000               00010001101
10352  *     rt -----
10353  *          rs -----
10354  *               rd -----
10355  */
10356 static char *MTC0(uint64 instruction, Dis_info *info)
10357 {
10358     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10359     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10360     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10361 
10362     const char *rt = GPR(rt_value, info);
10363 
10364     return img_format("MTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10365                       rt, c0s_value, sel_value);
10366 }
10367 
10368 
10369 /*
10370  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10371  *
10372  *   3         2         1
10373  *  10987654321098765432109876543210
10374  *  001000               00010001101
10375  *     rt -----
10376  *          rs -----
10377  *               rd -----
10378  */
10379 static char *MTC1(uint64 instruction, Dis_info *info)
10380 {
10381     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10382     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10383 
10384     const char *rt = GPR(rt_value, info);
10385     const char *fs = FPR(fs_value, info);
10386 
10387     return img_format("MTC1 %s, %s", rt, fs);
10388 }
10389 
10390 
10391 /*
10392  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10393  *
10394  *   3         2         1
10395  *  10987654321098765432109876543210
10396  *  001000               00010001101
10397  *     rt -----
10398  *          rs -----
10399  *               rd -----
10400  */
10401 static char *MTC2(uint64 instruction, Dis_info *info)
10402 {
10403     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10404     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10405 
10406     const char *rt = GPR(rt_value, info);
10407 
10408     return img_format("MTC2 %s, CP%" PRIu64, rt, cs_value);
10409 }
10410 
10411 
10412 /*
10413  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10414  *
10415  *   3         2         1
10416  *  10987654321098765432109876543210
10417  *  001000               00010001101
10418  *     rt -----
10419  *          rs -----
10420  *               rd -----
10421  */
10422 static char *MTGC0(uint64 instruction, Dis_info *info)
10423 {
10424     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10425     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10426     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10427 
10428     const char *rt = GPR(rt_value, info);
10429 
10430     return img_format("MTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10431                       rt, c0s_value, sel_value);
10432 }
10433 
10434 
10435 /*
10436  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10437  *
10438  *   3         2         1
10439  *  10987654321098765432109876543210
10440  *  001000               00010001101
10441  *     rt -----
10442  *          rs -----
10443  *               rd -----
10444  */
10445 static char *MTHC0(uint64 instruction, Dis_info *info)
10446 {
10447     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10448     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10449     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10450 
10451     const char *rt = GPR(rt_value, info);
10452 
10453     return img_format("MTHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10454                       rt, c0s_value, sel_value);
10455 }
10456 
10457 
10458 /*
10459  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10460  *
10461  *   3         2         1
10462  *  10987654321098765432109876543210
10463  *  001000               00010001101
10464  *     rt -----
10465  *          rs -----
10466  *               rd -----
10467  */
10468 static char *MTHC1(uint64 instruction, Dis_info *info)
10469 {
10470     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10471     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10472 
10473     const char *rt = GPR(rt_value, info);
10474     const char *fs = FPR(fs_value, info);
10475 
10476     return img_format("MTHC1 %s, %s", rt, fs);
10477 }
10478 
10479 
10480 /*
10481  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10482  *
10483  *   3         2         1
10484  *  10987654321098765432109876543210
10485  *  001000               00010001101
10486  *     rt -----
10487  *          rs -----
10488  *               rd -----
10489  */
10490 static char *MTHC2(uint64 instruction, Dis_info *info)
10491 {
10492     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10493     uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10494 
10495     const char *rt = GPR(rt_value, info);
10496 
10497     return img_format("MTHC2 %s, CP%" PRIu64, rt, cs_value);
10498 }
10499 
10500 
10501 /*
10502  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10503  *
10504  *   3         2         1
10505  *  10987654321098765432109876543210
10506  *  001000               00010001101
10507  *     rt -----
10508  *          rs -----
10509  *               rd -----
10510  */
10511 static char *MTHGC0(uint64 instruction, Dis_info *info)
10512 {
10513     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10514     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10515     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10516 
10517     const char *rt = GPR(rt_value, info);
10518 
10519     return img_format("MTHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10520                       rt, c0s_value, sel_value);
10521 }
10522 
10523 
10524 /*
10525  * [DSP] MTHI rs, ac - Move to HI register
10526  *
10527  *   3         2         1
10528  *  10987654321098765432109876543210
10529  *  001000xxxxx       10000001111111
10530  *          rs -----
10531  *               ac --
10532  */
10533 static char *MTHI_DSP_(uint64 instruction, Dis_info *info)
10534 {
10535     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10536     uint64 ac_value = extract_ac_15_14(instruction);
10537 
10538     const char *rs = GPR(rs_value, info);
10539     const char *ac = AC(ac_value, info);
10540 
10541     return img_format("MTHI %s, %s", rs, ac);
10542 }
10543 
10544 
10545 /*
10546  * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10547  *
10548  *   3         2         1
10549  *  10987654321098765432109876543210
10550  *  001000xxxxx       00001001111111
10551  *          rs -----
10552  *               ac --
10553  */
10554 static char *MTHLIP(uint64 instruction, Dis_info *info)
10555 {
10556     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10557     uint64 ac_value = extract_ac_15_14(instruction);
10558 
10559     const char *rs = GPR(rs_value, info);
10560     const char *ac = AC(ac_value, info);
10561 
10562     return img_format("MTHLIP %s, %s", rs, ac);
10563 }
10564 
10565 
10566 /*
10567  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10568  *
10569  *   3         2         1
10570  *  10987654321098765432109876543210
10571  *  001000               00010001101
10572  *     rt -----
10573  *          rs -----
10574  *               rd -----
10575  */
10576 static char *MTHTR(uint64 instruction, Dis_info *info)
10577 {
10578     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10579     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10580     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10581     uint64 u_value = extract_u_10(instruction);
10582 
10583     const char *rt = GPR(rt_value, info);
10584 
10585     return img_format("MTHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10586                       rt, c0s_value, u_value, sel_value);
10587 }
10588 
10589 
10590 /*
10591  * [DSP] MTLO rs, ac - Move to LO register
10592  *
10593  *   3         2         1
10594  *  10987654321098765432109876543210
10595  *  001000xxxxx       11000001111111
10596  *          rs -----
10597  *               ac --
10598  */
10599 static char *MTLO_DSP_(uint64 instruction, Dis_info *info)
10600 {
10601     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10602     uint64 ac_value = extract_ac_15_14(instruction);
10603 
10604     const char *rs = GPR(rs_value, info);
10605     const char *ac = AC(ac_value, info);
10606 
10607     return img_format("MTLO %s, %s", rs, ac);
10608 }
10609 
10610 
10611 /*
10612  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10613  *
10614  *   3         2         1
10615  *  10987654321098765432109876543210
10616  *  001000               00010001101
10617  *     rt -----
10618  *          rs -----
10619  *               rd -----
10620  */
10621 static char *MTTR(uint64 instruction, Dis_info *info)
10622 {
10623     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10624     uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10625     uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10626     uint64 u_value = extract_u_10(instruction);
10627 
10628     const char *rt = GPR(rt_value, info);
10629 
10630     return img_format("MTTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10631                       rt, c0s_value, u_value, sel_value);
10632 }
10633 
10634 
10635 /*
10636  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10637  *
10638  *   3         2         1
10639  *  10987654321098765432109876543210
10640  *  001000               00010001101
10641  *     rt -----
10642  *          rs -----
10643  *               rd -----
10644  */
10645 static char *MUH(uint64 instruction, Dis_info *info)
10646 {
10647     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10648     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10649     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10650 
10651     const char *rd = GPR(rd_value, info);
10652     const char *rs = GPR(rs_value, info);
10653     const char *rt = GPR(rt_value, info);
10654 
10655     return img_format("MUH %s, %s, %s", rd, rs, rt);
10656 }
10657 
10658 
10659 /*
10660  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10661  *
10662  *   3         2         1
10663  *  10987654321098765432109876543210
10664  *  001000               00010001101
10665  *     rt -----
10666  *          rs -----
10667  *               rd -----
10668  */
10669 static char *MUHU(uint64 instruction, Dis_info *info)
10670 {
10671     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10672     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10673     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10674 
10675     const char *rd = GPR(rd_value, info);
10676     const char *rs = GPR(rs_value, info);
10677     const char *rt = GPR(rt_value, info);
10678 
10679     return img_format("MUHU %s, %s, %s", rd, rs, rt);
10680 }
10681 
10682 
10683 /*
10684  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10685  *
10686  *   3         2         1
10687  *  10987654321098765432109876543210
10688  *  001000               00010001101
10689  *     rt -----
10690  *          rs -----
10691  *               rd -----
10692  */
10693 static char *MUL_32_(uint64 instruction, Dis_info *info)
10694 {
10695     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10696     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10697     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10698 
10699     const char *rd = GPR(rd_value, info);
10700     const char *rs = GPR(rs_value, info);
10701     const char *rt = GPR(rt_value, info);
10702 
10703     return img_format("MUL %s, %s, %s", rd, rs, rt);
10704 }
10705 
10706 
10707 /*
10708  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10709  *
10710  *   3         2         1
10711  *  10987654321098765432109876543210
10712  *  001000               00010001101
10713  *     rt -----
10714  *          rs -----
10715  *               rd -----
10716  */
10717 static char *MUL_4X4_(uint64 instruction, Dis_info *info)
10718 {
10719     uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10720     uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10721 
10722     const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10723     const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10724 
10725     return img_format("MUL %s, %s", rs4, rt4);
10726 }
10727 
10728 
10729 /*
10730  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10731  *
10732  *   3         2         1
10733  *  10987654321098765432109876543210
10734  *  001000               00010001101
10735  *     rt -----
10736  *          rs -----
10737  *               rd -----
10738  */
10739 static char *MUL_D(uint64 instruction, Dis_info *info)
10740 {
10741     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10742     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10743     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10744 
10745     const char *fd = FPR(fd_value, info);
10746     const char *fs = FPR(fs_value, info);
10747     const char *ft = FPR(ft_value, info);
10748 
10749     return img_format("MUL.D %s, %s, %s", fd, fs, ft);
10750 }
10751 
10752 
10753 /*
10754  * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
10755  *   products
10756  *
10757  *   3         2         1
10758  *  10987654321098765432109876543210
10759  *  001000               00000101101
10760  *     rt -----
10761  *          rs -----
10762  *               rd -----
10763  */
10764 static char *MUL_PH(uint64 instruction, Dis_info *info)
10765 {
10766     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10767     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10768     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10769 
10770     const char *rd = GPR(rd_value, info);
10771     const char *rs = GPR(rs_value, info);
10772     const char *rt = GPR(rt_value, info);
10773 
10774     return img_format("MUL.PH %s, %s, %s", rd, rs, rt);
10775 }
10776 
10777 
10778 /*
10779  * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
10780  *   products (saturated)
10781  *
10782  *   3         2         1
10783  *  10987654321098765432109876543210
10784  *  001000               10000101101
10785  *     rt -----
10786  *          rs -----
10787  *               rd -----
10788  */
10789 static char *MUL_S_PH(uint64 instruction, Dis_info *info)
10790 {
10791     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10792     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10793     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10794 
10795     const char *rd = GPR(rd_value, info);
10796     const char *rs = GPR(rs_value, info);
10797     const char *rt = GPR(rt_value, info);
10798 
10799     return img_format("MUL_S.PH %s, %s, %s", rd, rs, rt);
10800 }
10801 
10802 
10803 /*
10804  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10805  *
10806  *   3         2         1
10807  *  10987654321098765432109876543210
10808  *  001000               00010001101
10809  *     rt -----
10810  *          rs -----
10811  *               rd -----
10812  */
10813 static char *MUL_S(uint64 instruction, Dis_info *info)
10814 {
10815     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10816     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10817     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10818 
10819     const char *fd = FPR(fd_value, info);
10820     const char *fs = FPR(fs_value, info);
10821     const char *ft = FPR(ft_value, info);
10822 
10823     return img_format("MUL.S %s, %s, %s", fd, fs, ft);
10824 }
10825 
10826 
10827 /*
10828  * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
10829  *   to expanded width products
10830  *
10831  *   3         2         1
10832  *  10987654321098765432109876543210
10833  *  001000               x0000100101
10834  *     rt -----
10835  *          rs -----
10836  *               rd -----
10837  */
10838 static char *MULEQ_S_W_PHL(uint64 instruction, Dis_info *info)
10839 {
10840     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10841     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10842     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10843 
10844     const char *rd = GPR(rd_value, info);
10845     const char *rs = GPR(rs_value, info);
10846     const char *rt = GPR(rt_value, info);
10847 
10848     return img_format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
10849 }
10850 
10851 
10852 /*
10853  * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
10854  *   to expanded width products
10855  *
10856  *   3         2         1
10857  *  10987654321098765432109876543210
10858  *  001000               x0001100101
10859  *     rt -----
10860  *          rs -----
10861  *               rd -----
10862  */
10863 static char *MULEQ_S_W_PHR(uint64 instruction, Dis_info *info)
10864 {
10865     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10866     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10867     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10868 
10869     const char *rd = GPR(rd_value, info);
10870     const char *rs = GPR(rs_value, info);
10871     const char *rt = GPR(rt_value, info);
10872 
10873     return img_format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
10874 }
10875 
10876 
10877 /*
10878  * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
10879  *   by halfwords to halfword products
10880  *
10881  *   3         2         1
10882  *  10987654321098765432109876543210
10883  *  001000               x0010010101
10884  *     rt -----
10885  *          rs -----
10886  *               rd -----
10887  */
10888 static char *MULEU_S_PH_QBL(uint64 instruction, Dis_info *info)
10889 {
10890     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10891     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10892     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10893 
10894     const char *rd = GPR(rd_value, info);
10895     const char *rs = GPR(rs_value, info);
10896     const char *rt = GPR(rt_value, info);
10897 
10898     return img_format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
10899 }
10900 
10901 
10902 /*
10903  * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
10904  *   by halfwords to halfword products
10905  *
10906  *   3         2         1
10907  *  10987654321098765432109876543210
10908  *  001000               x0011010101
10909  *     rt -----
10910  *          rs -----
10911  *               rd -----
10912  */
10913 static char *MULEU_S_PH_QBR(uint64 instruction, Dis_info *info)
10914 {
10915     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10916     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10917     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10918 
10919     const char *rd = GPR(rd_value, info);
10920     const char *rs = GPR(rs_value, info);
10921     const char *rt = GPR(rt_value, info);
10922 
10923     return img_format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
10924 }
10925 
10926 
10927 /*
10928  * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
10929  *   to fractional halfword products
10930  *
10931  *   3         2         1
10932  *  10987654321098765432109876543210
10933  *  001000               x0100010101
10934  *     rt -----
10935  *          rs -----
10936  *               rd -----
10937  */
10938 static char *MULQ_RS_PH(uint64 instruction, Dis_info *info)
10939 {
10940     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10941     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10942     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10943 
10944     const char *rd = GPR(rd_value, info);
10945     const char *rs = GPR(rs_value, info);
10946     const char *rt = GPR(rt_value, info);
10947 
10948     return img_format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
10949 }
10950 
10951 
10952 /*
10953  * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
10954  *   product with saturation and rounding
10955  *
10956  *   3         2         1
10957  *  10987654321098765432109876543210
10958  *  001000               x0110010101
10959  *     rt -----
10960  *          rs -----
10961  *               rd -----
10962  */
10963 static char *MULQ_RS_W(uint64 instruction, Dis_info *info)
10964 {
10965     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10966     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10967     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10968 
10969     const char *rd = GPR(rd_value, info);
10970     const char *rs = GPR(rs_value, info);
10971     const char *rt = GPR(rt_value, info);
10972 
10973     return img_format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
10974 }
10975 
10976 
10977 /*
10978  * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
10979  *   products
10980  *
10981  *   3         2         1
10982  *  10987654321098765432109876543210
10983  *  001000               x0101010101
10984  *     rt -----
10985  *          rs -----
10986  *               rd -----
10987  */
10988 static char *MULQ_S_PH(uint64 instruction, Dis_info *info)
10989 {
10990     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10991     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10992     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10993 
10994     const char *rd = GPR(rd_value, info);
10995     const char *rs = GPR(rs_value, info);
10996     const char *rt = GPR(rt_value, info);
10997 
10998     return img_format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
10999 }
11000 
11001 
11002 /*
11003  * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11004  *   with saturation
11005  *
11006  *   3         2         1
11007  *  10987654321098765432109876543210
11008  *  001000               x0111010101
11009  *     rt -----
11010  *          rs -----
11011  *               rd -----
11012  */
11013 static char *MULQ_S_W(uint64 instruction, Dis_info *info)
11014 {
11015     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11016     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11017     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11018 
11019     const char *rd = GPR(rd_value, info);
11020     const char *rs = GPR(rs_value, info);
11021     const char *rt = GPR(rt_value, info);
11022 
11023     return img_format("MULQ_S.W %s, %s, %s", rd, rs, rt);
11024 }
11025 
11026 
11027 /*
11028  * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11029  *   elements and accumulate
11030  *
11031  *   3         2         1
11032  *  10987654321098765432109876543210
11033  *  001000            10110010111111
11034  *     rt -----
11035  *          rs -----
11036  *               ac --
11037  */
11038 static char *MULSA_W_PH(uint64 instruction, Dis_info *info)
11039 {
11040     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11041     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11042     uint64 ac_value = extract_ac_15_14(instruction);
11043 
11044     const char *ac = AC(ac_value, info);
11045     const char *rs = GPR(rs_value, info);
11046     const char *rt = GPR(rt_value, info);
11047 
11048     return img_format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
11049 }
11050 
11051 
11052 /*
11053  * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11054  *   halfwords and accumulate
11055  *
11056  *   3         2         1
11057  *  10987654321098765432109876543210
11058  *  001000            11110010111111
11059  *     rt -----
11060  *          rs -----
11061  *               ac --
11062  */
11063 static char *MULSAQ_S_W_PH(uint64 instruction, Dis_info *info)
11064 {
11065     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11066     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11067     uint64 ac_value = extract_ac_15_14(instruction);
11068 
11069     const char *ac = AC(ac_value, info);
11070     const char *rs = GPR(rs_value, info);
11071     const char *rt = GPR(rt_value, info);
11072 
11073     return img_format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
11074 }
11075 
11076 
11077 /*
11078  * [DSP] MULT ac, rs, rt - Multiply word
11079  *
11080  *   3         2         1
11081  *  10987654321098765432109876543210
11082  *  001000            00110010111111
11083  *     rt -----
11084  *          rs -----
11085  *               ac --
11086  */
11087 static char *MULT_DSP_(uint64 instruction, Dis_info *info)
11088 {
11089     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11090     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11091     uint64 ac_value = extract_ac_15_14(instruction);
11092 
11093     const char *ac = AC(ac_value, info);
11094     const char *rs = GPR(rs_value, info);
11095     const char *rt = GPR(rt_value, info);
11096 
11097     return img_format("MULT %s, %s, %s", ac, rs, rt);
11098 }
11099 
11100 
11101 /*
11102  * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11103  *
11104  *   3         2         1
11105  *  10987654321098765432109876543210
11106  *  001000            01110010111111
11107  *     rt -----
11108  *          rs -----
11109  *               ac --
11110  */
11111 static char *MULTU_DSP_(uint64 instruction, Dis_info *info)
11112 {
11113     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11114     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11115     uint64 ac_value = extract_ac_15_14(instruction);
11116 
11117     const char *ac = AC(ac_value, info);
11118     const char *rs = GPR(rs_value, info);
11119     const char *rt = GPR(rt_value, info);
11120 
11121     return img_format("MULTU %s, %s, %s", ac, rs, rt);
11122 }
11123 
11124 
11125 /*
11126  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11127  *
11128  *   3         2         1
11129  *  10987654321098765432109876543210
11130  *  001000               00010001101
11131  *     rt -----
11132  *          rs -----
11133  *               rd -----
11134  */
11135 static char *MULU(uint64 instruction, Dis_info *info)
11136 {
11137     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11138     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11139     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11140 
11141     const char *rd = GPR(rd_value, info);
11142     const char *rs = GPR(rs_value, info);
11143     const char *rt = GPR(rt_value, info);
11144 
11145     return img_format("MULU %s, %s, %s", rd, rs, rt);
11146 }
11147 
11148 
11149 /*
11150  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11151  *
11152  *   3         2         1
11153  *  10987654321098765432109876543210
11154  *  001000               00010001101
11155  *     rt -----
11156  *          rs -----
11157  *               rd -----
11158  */
11159 static char *NEG_D(uint64 instruction, Dis_info *info)
11160 {
11161     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11162     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11163 
11164     const char *ft = FPR(ft_value, info);
11165     const char *fs = FPR(fs_value, info);
11166 
11167     return img_format("NEG.D %s, %s", ft, fs);
11168 }
11169 
11170 
11171 /*
11172  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11173  *
11174  *   3         2         1
11175  *  10987654321098765432109876543210
11176  *  001000               00010001101
11177  *     rt -----
11178  *          rs -----
11179  *               rd -----
11180  */
11181 static char *NEG_S(uint64 instruction, Dis_info *info)
11182 {
11183     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11184     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11185 
11186     const char *ft = FPR(ft_value, info);
11187     const char *fs = FPR(fs_value, info);
11188 
11189     return img_format("NEG.S %s, %s", ft, fs);
11190 }
11191 
11192 
11193 /*
11194  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11195  *
11196  *   3         2         1
11197  *  10987654321098765432109876543210
11198  *  001000               00010001101
11199  *     rt -----
11200  *          rs -----
11201  *               rd -----
11202  */
11203 static char *NOP_16_(uint64 instruction, Dis_info *info)
11204 {
11205     (void)instruction;
11206 
11207     return g_strdup("NOP ");
11208 }
11209 
11210 
11211 /*
11212  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11213  *
11214  *   3         2         1
11215  *  10987654321098765432109876543210
11216  *  001000               00010001101
11217  *     rt -----
11218  *          rs -----
11219  *               rd -----
11220  */
11221 static char *NOP_32_(uint64 instruction, Dis_info *info)
11222 {
11223     (void)instruction;
11224 
11225     return g_strdup("NOP ");
11226 }
11227 
11228 
11229 /*
11230  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11231  *
11232  *   3         2         1
11233  *  10987654321098765432109876543210
11234  *  001000               00010001101
11235  *     rt -----
11236  *          rs -----
11237  *               rd -----
11238  */
11239 static char *NOR(uint64 instruction, Dis_info *info)
11240 {
11241     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11242     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11243     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11244 
11245     const char *rd = GPR(rd_value, info);
11246     const char *rs = GPR(rs_value, info);
11247     const char *rt = GPR(rt_value, info);
11248 
11249     return img_format("NOR %s, %s, %s", rd, rs, rt);
11250 }
11251 
11252 
11253 /*
11254  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11255  *
11256  *   3         2         1
11257  *  10987654321098765432109876543210
11258  *  001000               00010001101
11259  *     rt -----
11260  *          rs -----
11261  *               rd -----
11262  */
11263 static char *NOT_16_(uint64 instruction, Dis_info *info)
11264 {
11265     uint64 rt3_value = extract_rt3_9_8_7(instruction);
11266     uint64 rs3_value = extract_rs3_6_5_4(instruction);
11267 
11268     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11269     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11270 
11271     return img_format("NOT %s, %s", rt3, rs3);
11272 }
11273 
11274 
11275 /*
11276  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11277  *
11278  *   3         2         1
11279  *  10987654321098765432109876543210
11280  *  001000               00010001101
11281  *     rt -----
11282  *          rs -----
11283  *               rd -----
11284  */
11285 static char *OR_16_(uint64 instruction, Dis_info *info)
11286 {
11287     uint64 rt3_value = extract_rt3_9_8_7(instruction);
11288     uint64 rs3_value = extract_rs3_6_5_4(instruction);
11289 
11290     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11291     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11292 
11293     return img_format("OR %s, %s", rs3, rt3);
11294 }
11295 
11296 
11297 /*
11298  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11299  *
11300  *   3         2         1
11301  *  10987654321098765432109876543210
11302  *  001000               00010001101
11303  *     rt -----
11304  *          rs -----
11305  *               rd -----
11306  */
11307 static char *OR_32_(uint64 instruction, Dis_info *info)
11308 {
11309     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11310     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11311     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11312 
11313     const char *rd = GPR(rd_value, info);
11314     const char *rs = GPR(rs_value, info);
11315     const char *rt = GPR(rt_value, info);
11316 
11317     return img_format("OR %s, %s, %s", rd, rs, rt);
11318 }
11319 
11320 
11321 /*
11322  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11323  *
11324  *   3         2         1
11325  *  10987654321098765432109876543210
11326  *  001000               00010001101
11327  *     rt -----
11328  *          rs -----
11329  *               rd -----
11330  */
11331 static char *ORI(uint64 instruction, Dis_info *info)
11332 {
11333     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11334     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11335     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11336 
11337     const char *rt = GPR(rt_value, info);
11338     const char *rs = GPR(rs_value, info);
11339 
11340     return img_format("ORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
11341 }
11342 
11343 
11344 /*
11345  * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11346  *         source register and left halfword from another source register
11347  *
11348  *   3         2         1
11349  *  10987654321098765432109876543210
11350  *  001000               00010001101
11351  *     rt -----
11352  *          rs -----
11353  *               rd -----
11354  */
11355 static char *PACKRL_PH(uint64 instruction, Dis_info *info)
11356 {
11357     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11358     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11359     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11360 
11361     const char *rd = GPR(rd_value, info);
11362     const char *rs = GPR(rs_value, info);
11363     const char *rt = GPR(rt_value, info);
11364 
11365     return img_format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11366 }
11367 
11368 
11369 /*
11370  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11371  *
11372  *   3         2         1
11373  *  10987654321098765432109876543210
11374  *  001000               00010001101
11375  *     rt -----
11376  *          rs -----
11377  *               rd -----
11378  */
11379 static char *PAUSE(uint64 instruction, Dis_info *info)
11380 {
11381     (void)instruction;
11382 
11383     return g_strdup("PAUSE ");
11384 }
11385 
11386 
11387 /*
11388  * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11389  *         code bits
11390  *
11391  *   3         2         1
11392  *  10987654321098765432109876543210
11393  *  001000               00010001101
11394  *     rt -----
11395  *          rs -----
11396  *               rd -----
11397  */
11398 static char *PICK_PH(uint64 instruction, Dis_info *info)
11399 {
11400     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11401     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11402     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11403 
11404     const char *rd = GPR(rd_value, info);
11405     const char *rs = GPR(rs_value, info);
11406     const char *rt = GPR(rt_value, info);
11407 
11408     return img_format("PICK.PH %s, %s, %s", rd, rs, rt);
11409 }
11410 
11411 
11412 /*
11413  * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11414  *         code bits
11415  *
11416  *   3         2         1
11417  *  10987654321098765432109876543210
11418  *  001000               00010001101
11419  *     rt -----
11420  *          rs -----
11421  *               rd -----
11422  */
11423 static char *PICK_QB(uint64 instruction, Dis_info *info)
11424 {
11425     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11426     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11427     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11428 
11429     const char *rd = GPR(rd_value, info);
11430     const char *rs = GPR(rs_value, info);
11431     const char *rt = GPR(rt_value, info);
11432 
11433     return img_format("PICK.QB %s, %s, %s", rd, rs, rt);
11434 }
11435 
11436 
11437 /*
11438  * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11439  *         of a paired halfword
11440  *
11441  *   3         2         1
11442  *  10987654321098765432109876543210
11443  *  001000               00010001101
11444  *     rt -----
11445  *          rs -----
11446  *               rd -----
11447  */
11448 static char *PRECEQ_W_PHL(uint64 instruction, Dis_info *info)
11449 {
11450     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11451     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11452 
11453     const char *rt = GPR(rt_value, info);
11454     const char *rs = GPR(rs_value, info);
11455 
11456     return img_format("PRECEQ.W.PHL %s, %s", rt, rs);
11457 }
11458 
11459 
11460 /*
11461  * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11462  *         of a paired halfword
11463  *
11464  *   3         2         1
11465  *  10987654321098765432109876543210
11466  *  001000               00010001101
11467  *     rt -----
11468  *          rs -----
11469  *               rd -----
11470  */
11471 static char *PRECEQ_W_PHR(uint64 instruction, Dis_info *info)
11472 {
11473     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11474     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11475 
11476     const char *rt = GPR(rt_value, info);
11477     const char *rs = GPR(rs_value, info);
11478 
11479     return img_format("PRECEQ.W.PHR %s, %s", rt, rs);
11480 }
11481 
11482 
11483 /*
11484  * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11485  *         left-alternate elements of a quad byte vector
11486  *
11487  *   3         2         1
11488  *  10987654321098765432109876543210
11489  *  001000               00010001101
11490  *     rt -----
11491  *          rs -----
11492  *               rd -----
11493  */
11494 static char *PRECEQU_PH_QBLA(uint64 instruction, Dis_info *info)
11495 {
11496     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11497     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11498 
11499     const char *rt = GPR(rt_value, info);
11500     const char *rs = GPR(rs_value, info);
11501 
11502     return img_format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11503 }
11504 
11505 
11506 /*
11507  * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11508  *         elements of a quad byte vector
11509  *
11510  *   3         2         1
11511  *  10987654321098765432109876543210
11512  *  001000               00010001101
11513  *     rt -----
11514  *          rs -----
11515  *               rd -----
11516  */
11517 static char *PRECEQU_PH_QBL(uint64 instruction, Dis_info *info)
11518 {
11519     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11520     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11521 
11522     const char *rt = GPR(rt_value, info);
11523     const char *rs = GPR(rs_value, info);
11524 
11525     return img_format("PRECEQU.PH.QBL %s, %s", rt, rs);
11526 }
11527 
11528 
11529 /*
11530  * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11531  *         right-alternate elements of a quad byte vector
11532  *
11533  *   3         2         1
11534  *  10987654321098765432109876543210
11535  *  001000               00010001101
11536  *     rt -----
11537  *          rs -----
11538  *               rd -----
11539  */
11540 static char *PRECEQU_PH_QBRA(uint64 instruction, Dis_info *info)
11541 {
11542     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11543     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11544 
11545     const char *rt = GPR(rt_value, info);
11546     const char *rs = GPR(rs_value, info);
11547 
11548     return img_format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11549 }
11550 
11551 
11552 /*
11553  * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11554  *         elements of a quad byte vector
11555  *
11556  *   3         2         1
11557  *  10987654321098765432109876543210
11558  *  001000               00010001101
11559  *     rt -----
11560  *          rs -----
11561  *               rd -----
11562  */
11563 static char *PRECEQU_PH_QBR(uint64 instruction, Dis_info *info)
11564 {
11565     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11566     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11567 
11568     const char *rt = GPR(rt_value, info);
11569     const char *rs = GPR(rs_value, info);
11570 
11571     return img_format("PRECEQU.PH.QBR %s, %s", rt, rs);
11572 }
11573 
11574 
11575 /*
11576  * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11577  *         left-alternate elements of a quad byte vector to four unsigned
11578  *         halfwords
11579  *
11580  *   3         2         1
11581  *  10987654321098765432109876543210
11582  *  001000               00010001101
11583  *     rt -----
11584  *          rs -----
11585  *               rd -----
11586  */
11587 static char *PRECEU_PH_QBLA(uint64 instruction, Dis_info *info)
11588 {
11589     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11590     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11591 
11592     const char *rt = GPR(rt_value, info);
11593     const char *rs = GPR(rs_value, info);
11594 
11595     return img_format("PRECEU.PH.QBLA %s, %s", rt, rs);
11596 }
11597 
11598 
11599 /*
11600  * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
11601  *         elements of a quad byte vector to form unsigned halfwords
11602  *
11603  *   3         2         1
11604  *  10987654321098765432109876543210
11605  *  001000               00010001101
11606  *     rt -----
11607  *          rs -----
11608  *               rd -----
11609  */
11610 static char *PRECEU_PH_QBL(uint64 instruction, Dis_info *info)
11611 {
11612     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11613     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11614 
11615     const char *rt = GPR(rt_value, info);
11616     const char *rs = GPR(rs_value, info);
11617 
11618     return img_format("PRECEU.PH.QBL %s, %s", rt, rs);
11619 }
11620 
11621 
11622 /*
11623  * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
11624  *         right-alternate elements of a quad byte vector to form four
11625  *         unsigned halfwords
11626  *
11627  *   3         2         1
11628  *  10987654321098765432109876543210
11629  *  001000               00010001101
11630  *     rt -----
11631  *          rs -----
11632  *               rd -----
11633  */
11634 static char *PRECEU_PH_QBRA(uint64 instruction, Dis_info *info)
11635 {
11636     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11637     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11638 
11639     const char *rt = GPR(rt_value, info);
11640     const char *rs = GPR(rs_value, info);
11641 
11642     return img_format("PRECEU.PH.QBRA %s, %s", rt, rs);
11643 }
11644 
11645 
11646 /*
11647  * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
11648  *         elements of a quad byte vector to form unsigned halfwords
11649  *
11650  *   3         2         1
11651  *  10987654321098765432109876543210
11652  *  001000               00010001101
11653  *     rt -----
11654  *          rs -----
11655  *               rd -----
11656  */
11657 static char *PRECEU_PH_QBR(uint64 instruction, Dis_info *info)
11658 {
11659     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11660     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11661 
11662     const char *rt = GPR(rt_value, info);
11663     const char *rs = GPR(rs_value, info);
11664 
11665     return img_format("PRECEU.PH.QBR %s, %s", rt, rs);
11666 }
11667 
11668 
11669 /*
11670  * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
11671  *   halfwords to four bytes
11672  *
11673  *   3         2         1
11674  *  10987654321098765432109876543210
11675  *  001000               x0001101101
11676  *     rt -----
11677  *          rs -----
11678  *               rd -----
11679  */
11680 static char *PRECR_QB_PH(uint64 instruction, Dis_info *info)
11681 {
11682     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11683     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11684     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11685 
11686     const char *rd = GPR(rd_value, info);
11687     const char *rs = GPR(rs_value, info);
11688     const char *rt = GPR(rt_value, info);
11689 
11690     return img_format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
11691 }
11692 
11693 
11694 /*
11695  * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
11696  *   words to halfwords after a right shift
11697  *
11698  *   3         2         1
11699  *  10987654321098765432109876543210
11700  *  001000               x1110000101
11701  *     rt -----
11702  *          rs -----
11703  *               rd -----
11704  */
11705 static char *PRECR_SRA_PH_W(uint64 instruction, Dis_info *info)
11706 {
11707     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11708     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11709     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11710 
11711     const char *rt = GPR(rt_value, info);
11712     const char *rs = GPR(rs_value, info);
11713 
11714     return img_format("PRECR_SRA.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11715 }
11716 
11717 
11718 /*
11719  * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
11720  *   words to halfwords after a right shift with rounding
11721  *
11722  *   3         2         1
11723  *  10987654321098765432109876543210
11724  *  001000               x1110000101
11725  *     rt -----
11726  *          rs -----
11727  *               rd -----
11728  */
11729 static char *PRECR_SRA_R_PH_W(uint64 instruction, Dis_info *info)
11730 {
11731     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11732     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11733     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11734 
11735     const char *rt = GPR(rt_value, info);
11736     const char *rs = GPR(rs_value, info);
11737 
11738     return img_format("PRECR_SRA_R.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11739 }
11740 
11741 
11742 /*
11743  * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
11744  *   words to fractional halfwords
11745  *
11746  *   3         2         1
11747  *  10987654321098765432109876543210
11748  *  001000               x1110000101
11749  *     rt -----
11750  *          rs -----
11751  *               rd -----
11752  */
11753 static char *PRECRQ_PH_W(uint64 instruction, Dis_info *info)
11754 {
11755     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11756     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11757     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11758 
11759     const char *rd = GPR(rd_value, info);
11760     const char *rs = GPR(rs_value, info);
11761     const char *rt = GPR(rt_value, info);
11762 
11763     return img_format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
11764 }
11765 
11766 
11767 /*
11768  * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
11769  *   halfwords to four bytes
11770  *
11771  *   3         2         1
11772  *  10987654321098765432109876543210
11773  *  001000               x0010101101
11774  *     rt -----
11775  *          rs -----
11776  *               rd -----
11777  */
11778 static char *PRECRQ_QB_PH(uint64 instruction, Dis_info *info)
11779 {
11780     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11781     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11782     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11783 
11784     const char *rd = GPR(rd_value, info);
11785     const char *rs = GPR(rs_value, info);
11786     const char *rt = GPR(rt_value, info);
11787 
11788     return img_format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
11789 }
11790 
11791 
11792 /*
11793  * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
11794  *   words to halfwords with rounding and saturation
11795  *
11796  *   3         2         1
11797  *  10987654321098765432109876543210
11798  *  001000               x1110000101
11799  *     rt -----
11800  *          rs -----
11801  *               rd -----
11802  */
11803 static char *PRECRQ_RS_PH_W(uint64 instruction, Dis_info *info)
11804 {
11805     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11806     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11807     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11808 
11809     const char *rd = GPR(rd_value, info);
11810     const char *rs = GPR(rs_value, info);
11811     const char *rt = GPR(rt_value, info);
11812 
11813     return img_format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
11814 }
11815 
11816 
11817 /*
11818  * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
11819  *   halfwords to unsigned bytes with saturation
11820  *
11821  *   3         2         1
11822  *  10987654321098765432109876543210
11823  *  001000               x1110000101
11824  *     rt -----
11825  *          rs -----
11826  *               rd -----
11827  */
11828 static char *PRECRQU_S_QB_PH(uint64 instruction, Dis_info *info)
11829 {
11830     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11831     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11832     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11833 
11834     const char *rd = GPR(rd_value, info);
11835     const char *rs = GPR(rs_value, info);
11836     const char *rt = GPR(rt_value, info);
11837 
11838     return img_format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
11839 }
11840 
11841 
11842 /*
11843  *
11844  *
11845  *   3         2         1
11846  *  10987654321098765432109876543210
11847  *  001000               x1110000101
11848  *     rt -----
11849  *          rs -----
11850  *               rd -----
11851  */
11852 static char *PREF_S9_(uint64 instruction, Dis_info *info)
11853 {
11854     uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11855     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11856     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11857 
11858     const char *rs = GPR(rs_value, info);
11859 
11860     return img_format("PREF 0x%" PRIx64 ", %" PRId64 "(%s)",
11861                       hint_value, s_value, rs);
11862 }
11863 
11864 
11865 /*
11866  *
11867  *
11868  *   3         2         1
11869  *  10987654321098765432109876543210
11870  *  001000               x1110000101
11871  *     rt -----
11872  *          rs -----
11873  *               rd -----
11874  */
11875 static char *PREF_U12_(uint64 instruction, Dis_info *info)
11876 {
11877     uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11878     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11879     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11880 
11881     const char *rs = GPR(rs_value, info);
11882 
11883     return img_format("PREF 0x%" PRIx64 ", 0x%" PRIx64 "(%s)",
11884                       hint_value, u_value, rs);
11885 }
11886 
11887 
11888 /*
11889  *
11890  *
11891  *   3         2         1
11892  *  10987654321098765432109876543210
11893  *  001000               x1110000101
11894  *     rt -----
11895  *          rs -----
11896  *               rd -----
11897  */
11898 static char *PREFE(uint64 instruction, Dis_info *info)
11899 {
11900     uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11901     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11902     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11903 
11904     const char *rs = GPR(rs_value, info);
11905 
11906     return img_format("PREFE 0x%" PRIx64 ", %" PRId64 "(%s)",
11907                       hint_value, s_value, rs);
11908 }
11909 
11910 
11911 /*
11912  * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
11913  *
11914  *   3         2         1
11915  *  10987654321098765432109876543210
11916  *  001000               x1110000101
11917  *     rt -----
11918  *          rs -----
11919  *               rd -----
11920  */
11921 static char *PREPEND(uint64 instruction, Dis_info *info)
11922 {
11923     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11924     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11925     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11926 
11927     const char *rt = GPR(rt_value, info);
11928     const char *rs = GPR(rs_value, info);
11929 
11930     return img_format("PREPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11931 }
11932 
11933 
11934 /*
11935  * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
11936  *
11937  *   3         2         1
11938  *  10987654321098765432109876543210
11939  *  001000          1111000100111111
11940  *     rt -----
11941  *          rs -----
11942  */
11943 static char *RADDU_W_QB(uint64 instruction, Dis_info *info)
11944 {
11945     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11946     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11947 
11948     const char *rt = GPR(rt_value, info);
11949     const char *rs = GPR(rs_value, info);
11950 
11951     return img_format("RADDU.W.QB %s, %s", rt, rs);
11952 }
11953 
11954 
11955 /*
11956  * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
11957  *
11958  *   3         2         1
11959  *  10987654321098765432109876543210
11960  *  001000            00011001111111
11961  *     rt -----
11962  *        mask -------
11963  */
11964 static char *RDDSP(uint64 instruction, Dis_info *info)
11965 {
11966     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11967     uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
11968 
11969     const char *rt = GPR(rt_value, info);
11970 
11971     return img_format("RDDSP %s, 0x%" PRIx64, rt, mask_value);
11972 }
11973 
11974 
11975 /*
11976  *
11977  *
11978  *   3         2         1
11979  *  10987654321098765432109876543210
11980  *  001000               x1110000101
11981  *     rt -----
11982  *          rs -----
11983  *               rd -----
11984  */
11985 static char *RDHWR(uint64 instruction, Dis_info *info)
11986 {
11987     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11988     uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
11989     uint64 sel_value = extract_sel_13_12_11(instruction);
11990 
11991     const char *rt = GPR(rt_value, info);
11992 
11993     return img_format("RDHWR %s, CP%" PRIu64 ", 0x%" PRIx64,
11994                       rt, hs_value, sel_value);
11995 }
11996 
11997 
11998 /*
11999  *
12000  *
12001  *   3         2         1
12002  *  10987654321098765432109876543210
12003  *  001000               x1110000101
12004  *     rt -----
12005  *          rs -----
12006  *               rd -----
12007  */
12008 static char *RDPGPR(uint64 instruction, Dis_info *info)
12009 {
12010     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12011     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12012 
12013     const char *rt = GPR(rt_value, info);
12014     const char *rs = GPR(rs_value, info);
12015 
12016     return img_format("RDPGPR %s, %s", rt, rs);
12017 }
12018 
12019 
12020 /*
12021  *
12022  *
12023  *   3         2         1
12024  *  10987654321098765432109876543210
12025  *  001000               x1110000101
12026  *     rt -----
12027  *          rs -----
12028  *               rd -----
12029  */
12030 static char *RECIP_D(uint64 instruction, Dis_info *info)
12031 {
12032     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12033     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12034 
12035     const char *ft = FPR(ft_value, info);
12036     const char *fs = FPR(fs_value, info);
12037 
12038     return img_format("RECIP.D %s, %s", ft, fs);
12039 }
12040 
12041 
12042 /*
12043  *
12044  *
12045  *   3         2         1
12046  *  10987654321098765432109876543210
12047  *  001000               x1110000101
12048  *     rt -----
12049  *          rs -----
12050  *               rd -----
12051  */
12052 static char *RECIP_S(uint64 instruction, Dis_info *info)
12053 {
12054     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12055     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12056 
12057     const char *ft = FPR(ft_value, info);
12058     const char *fs = FPR(fs_value, info);
12059 
12060     return img_format("RECIP.S %s, %s", ft, fs);
12061 }
12062 
12063 
12064 /*
12065  * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12066  *   positions
12067  *
12068  *   3         2         1
12069  *  10987654321098765432109876543210
12070  *  001000               x0000111101
12071  *     rt -----
12072  *           s ----------
12073  */
12074 static char *REPL_PH(uint64 instruction, Dis_info *info)
12075 {
12076     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12077     int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
12078 
12079     const char *rt = GPR(rt_value, info);
12080 
12081     return img_format("REPL.PH %s, %" PRId64, rt, s_value);
12082 }
12083 
12084 
12085 /*
12086  * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12087  *   positions
12088  *
12089  *   3         2         1
12090  *  10987654321098765432109876543210
12091  *  001000             x010111111111
12092  *     rt -----
12093  *           u --------
12094  */
12095 static char *REPL_QB(uint64 instruction, Dis_info *info)
12096 {
12097     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12098     uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12099 
12100     const char *rt = GPR(rt_value, info);
12101 
12102     return img_format("REPL.QB %s, 0x%" PRIx64, rt, u_value);
12103 }
12104 
12105 
12106 /*
12107  * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12108  *   positions
12109  *
12110  *   3         2         1
12111  *  10987654321098765432109876543210
12112  *  001000          0000001100111111
12113  *     rt -----
12114  *          rs -----
12115  */
12116 static char *REPLV_PH(uint64 instruction, Dis_info *info)
12117 {
12118     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12119     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12120 
12121     const char *rt = GPR(rt_value, info);
12122     const char *rs = GPR(rs_value, info);
12123 
12124     return img_format("REPLV.PH %s, %s", rt, rs);
12125 }
12126 
12127 
12128 /*
12129  * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12130  *
12131  *   3         2         1
12132  *  10987654321098765432109876543210
12133  *  001000          0001001100111111
12134  *     rt -----
12135  *          rs -----
12136  */
12137 static char *REPLV_QB(uint64 instruction, Dis_info *info)
12138 {
12139     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12140     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12141 
12142     const char *rt = GPR(rt_value, info);
12143     const char *rs = GPR(rs_value, info);
12144 
12145     return img_format("REPLV.QB %s, %s", rt, rs);
12146 }
12147 
12148 
12149 /*
12150  *
12151  *
12152  *   3         2         1
12153  *  10987654321098765432109876543210
12154  *  001000               x1110000101
12155  *     rt -----
12156  *          rs -----
12157  *               rd -----
12158  */
12159 static char *RESTORE_32_(uint64 instruction, Dis_info *info)
12160 {
12161     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12162     uint64 count_value = extract_count_19_18_17_16(instruction);
12163     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12164     uint64 gp_value = extract_gp_2(instruction);
12165 
12166     g_autofree char *save_restore_str = save_restore_list(
12167         rt_value, count_value, gp_value, info);
12168     return img_format("RESTORE 0x%" PRIx64 "%s", u_value, save_restore_str);
12169 }
12170 
12171 
12172 /*
12173  *
12174  *
12175  *   3         2         1
12176  *  10987654321098765432109876543210
12177  *  001000               x1110000101
12178  *     rt -----
12179  *          rs -----
12180  *               rd -----
12181  */
12182 static char *RESTORE_JRC_16_(uint64 instruction, Dis_info *info)
12183 {
12184     uint64 rt1_value = extract_rtl_11(instruction);
12185     uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12186     uint64 count_value = extract_count_3_2_1_0(instruction);
12187 
12188     g_autofree char *save_restore_str = save_restore_list(
12189         encode_rt1_from_rt(rt1_value), count_value, 0, info);
12190     return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value, save_restore_str);
12191 }
12192 
12193 
12194 /*
12195  *
12196  *
12197  *   3         2         1
12198  *  10987654321098765432109876543210
12199  *  001000               x1110000101
12200  *     rt -----
12201  *          rs -----
12202  *               rd -----
12203  */
12204 static char *RESTORE_JRC_32_(uint64 instruction, Dis_info *info)
12205 {
12206     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12207     uint64 count_value = extract_count_19_18_17_16(instruction);
12208     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12209     uint64 gp_value = extract_gp_2(instruction);
12210 
12211     g_autofree char *save_restore_str = save_restore_list(
12212         rt_value, count_value, gp_value, info);
12213     return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value,
12214                       save_restore_str);
12215 }
12216 
12217 
12218 /*
12219  *
12220  *
12221  *   3         2         1
12222  *  10987654321098765432109876543210
12223  *  001000               x1110000101
12224  *     rt -----
12225  *          rs -----
12226  *               rd -----
12227  */
12228 static char *RESTOREF(uint64 instruction, Dis_info *info)
12229 {
12230     uint64 count_value = extract_count_19_18_17_16(instruction);
12231     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12232 
12233 
12234     return img_format("RESTOREF 0x%" PRIx64 ", 0x%" PRIx64,
12235                       u_value, count_value);
12236 }
12237 
12238 
12239 /*
12240  *
12241  *
12242  *   3         2         1
12243  *  10987654321098765432109876543210
12244  *  001000               x1110000101
12245  *     rt -----
12246  *          rs -----
12247  *               rd -----
12248  */
12249 static char *RINT_D(uint64 instruction, Dis_info *info)
12250 {
12251     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12252     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12253 
12254     const char *ft = FPR(ft_value, info);
12255     const char *fs = FPR(fs_value, info);
12256 
12257     return img_format("RINT.D %s, %s", ft, fs);
12258 }
12259 
12260 
12261 /*
12262  *
12263  *
12264  *   3         2         1
12265  *  10987654321098765432109876543210
12266  *  001000               x1110000101
12267  *     rt -----
12268  *          rs -----
12269  *               rd -----
12270  */
12271 static char *RINT_S(uint64 instruction, Dis_info *info)
12272 {
12273     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12274     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12275 
12276     const char *ft = FPR(ft_value, info);
12277     const char *fs = FPR(fs_value, info);
12278 
12279     return img_format("RINT.S %s, %s", ft, fs);
12280 }
12281 
12282 
12283 /*
12284  *
12285  *
12286  *   3         2         1
12287  *  10987654321098765432109876543210
12288  *  001000               x1110000101
12289  *     rt -----
12290  *          rs -----
12291  *               rd -----
12292  */
12293 static char *ROTR(uint64 instruction, Dis_info *info)
12294 {
12295     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12296     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12297     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12298 
12299     const char *rt = GPR(rt_value, info);
12300     const char *rs = GPR(rs_value, info);
12301 
12302     return img_format("ROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
12303 }
12304 
12305 
12306 /*
12307  *
12308  *
12309  *   3         2         1
12310  *  10987654321098765432109876543210
12311  *  001000               x1110000101
12312  *     rt -----
12313  *          rs -----
12314  *               rd -----
12315  */
12316 static char *ROTRV(uint64 instruction, Dis_info *info)
12317 {
12318     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12319     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12320     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12321 
12322     const char *rd = GPR(rd_value, info);
12323     const char *rs = GPR(rs_value, info);
12324     const char *rt = GPR(rt_value, info);
12325 
12326     return img_format("ROTRV %s, %s, %s", rd, rs, rt);
12327 }
12328 
12329 
12330 /*
12331  *
12332  *
12333  *   3         2         1
12334  *  10987654321098765432109876543210
12335  *  001000               x1110000101
12336  *     rt -----
12337  *          rs -----
12338  *               rd -----
12339  */
12340 static char *ROTX(uint64 instruction, Dis_info *info)
12341 {
12342     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12343     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12344     uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12345     uint64 stripe_value = extract_stripe_6(instruction);
12346     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12347 
12348     const char *rt = GPR(rt_value, info);
12349     const char *rs = GPR(rs_value, info);
12350 
12351     return img_format("ROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
12352                        rt, rs, shift_value, shiftx_value, stripe_value);
12353 }
12354 
12355 
12356 /*
12357  *
12358  *
12359  *   3         2         1
12360  *  10987654321098765432109876543210
12361  *  001000               x1110000101
12362  *     rt -----
12363  *          rs -----
12364  *               rd -----
12365  */
12366 static char *ROUND_L_D(uint64 instruction, Dis_info *info)
12367 {
12368     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12369     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12370 
12371     const char *ft = FPR(ft_value, info);
12372     const char *fs = FPR(fs_value, info);
12373 
12374     return img_format("ROUND.L.D %s, %s", ft, fs);
12375 }
12376 
12377 
12378 /*
12379  *
12380  *
12381  *   3         2         1
12382  *  10987654321098765432109876543210
12383  *  001000               x1110000101
12384  *     rt -----
12385  *          rs -----
12386  *               rd -----
12387  */
12388 static char *ROUND_L_S(uint64 instruction, Dis_info *info)
12389 {
12390     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12391     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12392 
12393     const char *ft = FPR(ft_value, info);
12394     const char *fs = FPR(fs_value, info);
12395 
12396     return img_format("ROUND.L.S %s, %s", ft, fs);
12397 }
12398 
12399 
12400 /*
12401  *
12402  *
12403  *   3         2         1
12404  *  10987654321098765432109876543210
12405  *  001000               x1110000101
12406  *     rt -----
12407  *          rs -----
12408  *               rd -----
12409  */
12410 static char *ROUND_W_D(uint64 instruction, Dis_info *info)
12411 {
12412     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12413     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12414 
12415     const char *ft = FPR(ft_value, info);
12416     const char *fs = FPR(fs_value, info);
12417 
12418     return img_format("ROUND.W.D %s, %s", ft, fs);
12419 }
12420 
12421 
12422 /*
12423  *
12424  *
12425  *   3         2         1
12426  *  10987654321098765432109876543210
12427  *  001000               x1110000101
12428  *     rt -----
12429  *          rs -----
12430  *               rd -----
12431  */
12432 static char *ROUND_W_S(uint64 instruction, Dis_info *info)
12433 {
12434     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12435     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12436 
12437     const char *ft = FPR(ft_value, info);
12438     const char *fs = FPR(fs_value, info);
12439 
12440     return img_format("ROUND.W.S %s, %s", ft, fs);
12441 }
12442 
12443 
12444 /*
12445  *
12446  *
12447  *   3         2         1
12448  *  10987654321098765432109876543210
12449  *  001000               x1110000101
12450  *     rt -----
12451  *          rs -----
12452  *               rd -----
12453  */
12454 static char *RSQRT_D(uint64 instruction, Dis_info *info)
12455 {
12456     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12457     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12458 
12459     const char *ft = FPR(ft_value, info);
12460     const char *fs = FPR(fs_value, info);
12461 
12462     return img_format("RSQRT.D %s, %s", ft, fs);
12463 }
12464 
12465 
12466 /*
12467  *
12468  *
12469  *   3         2         1
12470  *  10987654321098765432109876543210
12471  *  001000               x1110000101
12472  *     rt -----
12473  *          rs -----
12474  *               rd -----
12475  */
12476 static char *RSQRT_S(uint64 instruction, Dis_info *info)
12477 {
12478     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12479     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12480 
12481     const char *ft = FPR(ft_value, info);
12482     const char *fs = FPR(fs_value, info);
12483 
12484     return img_format("RSQRT.S %s, %s", ft, fs);
12485 }
12486 
12487 
12488 /*
12489  *
12490  *
12491  *   3         2         1
12492  *  10987654321098765432109876543210
12493  *  001000               01001001101
12494  *     rt -----
12495  *          rs -----
12496  *               rd -----
12497  */
12498 static char *SAVE_16_(uint64 instruction, Dis_info *info)
12499 {
12500     uint64 rt1_value = extract_rtl_11(instruction);
12501     uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12502     uint64 count_value = extract_count_3_2_1_0(instruction);
12503 
12504     g_autofree char *save_restore_str = save_restore_list(
12505         encode_rt1_from_rt(rt1_value), count_value, 0, info);
12506     return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12507 }
12508 
12509 
12510 /*
12511  *
12512  *
12513  *   3         2         1
12514  *  10987654321098765432109876543210
12515  *  001000               01001001101
12516  *     rt -----
12517  *          rs -----
12518  *               rd -----
12519  */
12520 static char *SAVE_32_(uint64 instruction, Dis_info *info)
12521 {
12522     uint64 count_value = extract_count_19_18_17_16(instruction);
12523     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12524     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12525     uint64 gp_value = extract_gp_2(instruction);
12526 
12527     g_autofree char *save_restore_str = save_restore_list(
12528         rt_value, count_value, gp_value, info);
12529     return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12530 }
12531 
12532 
12533 /*
12534  *
12535  *
12536  *   3         2         1
12537  *  10987654321098765432109876543210
12538  *  001000               01001001101
12539  *     rt -----
12540  *          rs -----
12541  *               rd -----
12542  */
12543 static char *SAVEF(uint64 instruction, Dis_info *info)
12544 {
12545     uint64 count_value = extract_count_19_18_17_16(instruction);
12546     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12547 
12548 
12549     return img_format("SAVEF 0x%" PRIx64 ", 0x%" PRIx64, u_value, count_value);
12550 }
12551 
12552 
12553 /*
12554  *
12555  *
12556  *   3         2         1
12557  *  10987654321098765432109876543210
12558  *  001000               01001001101
12559  *     rt -----
12560  *          rs -----
12561  *               rd -----
12562  */
12563 static char *SB_16_(uint64 instruction, Dis_info *info)
12564 {
12565     uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12566     uint64 rs3_value = extract_rs3_6_5_4(instruction);
12567     uint64 u_value = extract_u_1_0(instruction);
12568 
12569     const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
12570     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
12571 
12572     return img_format("SB %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
12573 }
12574 
12575 
12576 /*
12577  *
12578  *
12579  *   3         2         1
12580  *  10987654321098765432109876543210
12581  *  001000               01001001101
12582  *     rt -----
12583  *          rs -----
12584  *               rd -----
12585  */
12586 static char *SB_GP_(uint64 instruction, Dis_info *info)
12587 {
12588     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12589     uint64 u_value = extract_u_17_to_0(instruction);
12590 
12591     const char *rt = GPR(rt_value, info);
12592 
12593     return img_format("SB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12594 }
12595 
12596 
12597 /*
12598  *
12599  *
12600  *   3         2         1
12601  *  10987654321098765432109876543210
12602  *  001000               01001001101
12603  *     rt -----
12604  *          rs -----
12605  *               rd -----
12606  */
12607 static char *SB_S9_(uint64 instruction, Dis_info *info)
12608 {
12609     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12610     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12611     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12612 
12613     const char *rt = GPR(rt_value, info);
12614     const char *rs = GPR(rs_value, info);
12615 
12616     return img_format("SB %s, %" PRId64 "(%s)", rt, s_value, rs);
12617 }
12618 
12619 
12620 /*
12621  *
12622  *
12623  *   3         2         1
12624  *  10987654321098765432109876543210
12625  *  001000               01001001101
12626  *     rt -----
12627  *          rs -----
12628  *               rd -----
12629  */
12630 static char *SB_U12_(uint64 instruction, Dis_info *info)
12631 {
12632     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12633     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12634     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12635 
12636     const char *rt = GPR(rt_value, info);
12637     const char *rs = GPR(rs_value, info);
12638 
12639     return img_format("SB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12640 }
12641 
12642 
12643 /*
12644  *
12645  *
12646  *   3         2         1
12647  *  10987654321098765432109876543210
12648  *  001000               01001001101
12649  *     rt -----
12650  *          rs -----
12651  *               rd -----
12652  */
12653 static char *SBE(uint64 instruction, Dis_info *info)
12654 {
12655     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12656     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12657     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12658 
12659     const char *rt = GPR(rt_value, info);
12660     const char *rs = GPR(rs_value, info);
12661 
12662     return img_format("SBE %s, %" PRId64 "(%s)", rt, s_value, rs);
12663 }
12664 
12665 
12666 /*
12667  *
12668  *
12669  *   3         2         1
12670  *  10987654321098765432109876543210
12671  *  001000               01001001101
12672  *     rt -----
12673  *          rs -----
12674  *               rd -----
12675  */
12676 static char *SBX(uint64 instruction, Dis_info *info)
12677 {
12678     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12679     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12680     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12681 
12682     const char *rd = GPR(rd_value, info);
12683     const char *rs = GPR(rs_value, info);
12684     const char *rt = GPR(rt_value, info);
12685 
12686     return img_format("SBX %s, %s(%s)", rd, rs, rt);
12687 }
12688 
12689 
12690 /*
12691  *
12692  *
12693  *   3         2         1
12694  *  10987654321098765432109876543210
12695  *  001000               01001001101
12696  *     rt -----
12697  *          rs -----
12698  *               rd -----
12699  */
12700 static char *SC(uint64 instruction, Dis_info *info)
12701 {
12702     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12703     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12704     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12705 
12706     const char *rt = GPR(rt_value, info);
12707     const char *rs = GPR(rs_value, info);
12708 
12709     return img_format("SC %s, %" PRId64 "(%s)", rt, s_value, rs);
12710 }
12711 
12712 
12713 /*
12714  *
12715  *
12716  *   3         2         1
12717  *  10987654321098765432109876543210
12718  *  001000               01001001101
12719  *     rt -----
12720  *          rs -----
12721  *               rd -----
12722  */
12723 static char *SCD(uint64 instruction, Dis_info *info)
12724 {
12725     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12726     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12727     int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
12728 
12729     const char *rt = GPR(rt_value, info);
12730     const char *rs = GPR(rs_value, info);
12731 
12732     return img_format("SCD %s, %" PRId64 "(%s)", rt, s_value, rs);
12733 }
12734 
12735 
12736 /*
12737  *
12738  *
12739  *   3         2         1
12740  *  10987654321098765432109876543210
12741  *  001000               01001001101
12742  *     rt -----
12743  *          rs -----
12744  *               rd -----
12745  */
12746 static char *SCDP(uint64 instruction, Dis_info *info)
12747 {
12748     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12749     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12750     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12751 
12752     const char *rt = GPR(rt_value, info);
12753     const char *ru = GPR(ru_value, info);
12754     const char *rs = GPR(rs_value, info);
12755 
12756     return img_format("SCDP %s, %s, (%s)", rt, ru, rs);
12757 }
12758 
12759 
12760 /*
12761  *
12762  *
12763  *   3         2         1
12764  *  10987654321098765432109876543210
12765  *  001000               01001001101
12766  *     rt -----
12767  *          rs -----
12768  *               rd -----
12769  */
12770 static char *SCE(uint64 instruction, Dis_info *info)
12771 {
12772     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12773     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12774     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12775 
12776     const char *rt = GPR(rt_value, info);
12777     const char *rs = GPR(rs_value, info);
12778 
12779     return img_format("SCE %s, %" PRId64 "(%s)", rt, s_value, rs);
12780 }
12781 
12782 
12783 /*
12784  *
12785  *
12786  *   3         2         1
12787  *  10987654321098765432109876543210
12788  *  001000               01001001101
12789  *     rt -----
12790  *          rs -----
12791  *               rd -----
12792  */
12793 static char *SCWP(uint64 instruction, Dis_info *info)
12794 {
12795     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12796     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12797     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12798 
12799     const char *rt = GPR(rt_value, info);
12800     const char *ru = GPR(ru_value, info);
12801     const char *rs = GPR(rs_value, info);
12802 
12803     return img_format("SCWP %s, %s, (%s)", rt, ru, rs);
12804 }
12805 
12806 
12807 /*
12808  *
12809  *
12810  *   3         2         1
12811  *  10987654321098765432109876543210
12812  *  001000               01001001101
12813  *     rt -----
12814  *          rs -----
12815  *               rd -----
12816  */
12817 static char *SCWPE(uint64 instruction, Dis_info *info)
12818 {
12819     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12820     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12821     uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12822 
12823     const char *rt = GPR(rt_value, info);
12824     const char *ru = GPR(ru_value, info);
12825     const char *rs = GPR(rs_value, info);
12826 
12827     return img_format("SCWPE %s, %s, (%s)", rt, ru, rs);
12828 }
12829 
12830 
12831 /*
12832  *
12833  *
12834  *   3         2         1
12835  *  10987654321098765432109876543210
12836  *  001000               01001001101
12837  *     rt -----
12838  *          rs -----
12839  *               rd -----
12840  */
12841 static char *SD_GP_(uint64 instruction, Dis_info *info)
12842 {
12843     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12844     uint64 u_value = extract_u_20_to_3__s3(instruction);
12845 
12846     const char *rt = GPR(rt_value, info);
12847 
12848     return img_format("SD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12849 }
12850 
12851 
12852 /*
12853  *
12854  *
12855  *   3         2         1
12856  *  10987654321098765432109876543210
12857  *  001000               01001001101
12858  *     rt -----
12859  *          rs -----
12860  *               rd -----
12861  */
12862 static char *SD_S9_(uint64 instruction, Dis_info *info)
12863 {
12864     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12865     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12866     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12867 
12868     const char *rt = GPR(rt_value, info);
12869     const char *rs = GPR(rs_value, info);
12870 
12871     return img_format("SD %s, %" PRId64 "(%s)", rt, s_value, rs);
12872 }
12873 
12874 
12875 /*
12876  *
12877  *
12878  *   3         2         1
12879  *  10987654321098765432109876543210
12880  *  001000               01001001101
12881  *     rt -----
12882  *          rs -----
12883  *               rd -----
12884  */
12885 static char *SD_U12_(uint64 instruction, Dis_info *info)
12886 {
12887     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12888     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12889     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12890 
12891     const char *rt = GPR(rt_value, info);
12892     const char *rs = GPR(rs_value, info);
12893 
12894     return img_format("SD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12895 }
12896 
12897 
12898 /*
12899  *
12900  *
12901  *   3         2         1
12902  *  10987654321098765432109876543210
12903  *  001000               01001001101
12904  *     rt -----
12905  *          rs -----
12906  *               rd -----
12907  */
12908 static char *SDBBP_16_(uint64 instruction, Dis_info *info)
12909 {
12910     uint64 code_value = extract_code_2_1_0(instruction);
12911 
12912 
12913     return img_format("SDBBP 0x%" PRIx64, code_value);
12914 }
12915 
12916 
12917 /*
12918  *
12919  *
12920  *   3         2         1
12921  *  10987654321098765432109876543210
12922  *  001000               01001001101
12923  *     rt -----
12924  *          rs -----
12925  *               rd -----
12926  */
12927 static char *SDBBP_32_(uint64 instruction, Dis_info *info)
12928 {
12929     uint64 code_value = extract_code_18_to_0(instruction);
12930 
12931 
12932     return img_format("SDBBP 0x%" PRIx64, code_value);
12933 }
12934 
12935 
12936 /*
12937  *
12938  *
12939  *   3         2         1
12940  *  10987654321098765432109876543210
12941  *  001000               01001001101
12942  *     rt -----
12943  *          rs -----
12944  *               rd -----
12945  */
12946 static char *SDC1_GP_(uint64 instruction, Dis_info *info)
12947 {
12948     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12949     uint64 u_value = extract_u_17_to_2__s2(instruction);
12950 
12951     const char *ft = FPR(ft_value, info);
12952 
12953     return img_format("SDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
12954 }
12955 
12956 
12957 /*
12958  *
12959  *
12960  *   3         2         1
12961  *  10987654321098765432109876543210
12962  *  001000               01001001101
12963  *     rt -----
12964  *          rs -----
12965  *               rd -----
12966  */
12967 static char *SDC1_S9_(uint64 instruction, Dis_info *info)
12968 {
12969     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12970     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12971     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12972 
12973     const char *ft = FPR(ft_value, info);
12974     const char *rs = GPR(rs_value, info);
12975 
12976     return img_format("SDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
12977 }
12978 
12979 
12980 /*
12981  *
12982  *
12983  *   3         2         1
12984  *  10987654321098765432109876543210
12985  *  001000               01001001101
12986  *     rt -----
12987  *          rs -----
12988  *               rd -----
12989  */
12990 static char *SDC1_U12_(uint64 instruction, Dis_info *info)
12991 {
12992     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12993     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12994     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12995 
12996     const char *ft = FPR(ft_value, info);
12997     const char *rs = GPR(rs_value, info);
12998 
12999     return img_format("SDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
13000 }
13001 
13002 
13003 /*
13004  *
13005  *
13006  *   3         2         1
13007  *  10987654321098765432109876543210
13008  *  001000               01001001101
13009  *     rt -----
13010  *          rs -----
13011  *               rd -----
13012  */
13013 static char *SDC1X(uint64 instruction, Dis_info *info)
13014 {
13015     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13016     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13017     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13018 
13019     const char *ft = FPR(ft_value, info);
13020     const char *rs = GPR(rs_value, info);
13021     const char *rt = GPR(rt_value, info);
13022 
13023     return img_format("SDC1X %s, %s(%s)", ft, rs, rt);
13024 }
13025 
13026 
13027 /*
13028  *
13029  *
13030  *   3         2         1
13031  *  10987654321098765432109876543210
13032  *  001000               01001001101
13033  *     rt -----
13034  *          rs -----
13035  *               rd -----
13036  */
13037 static char *SDC1XS(uint64 instruction, Dis_info *info)
13038 {
13039     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13040     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13041     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13042 
13043     const char *ft = FPR(ft_value, info);
13044     const char *rs = GPR(rs_value, info);
13045     const char *rt = GPR(rt_value, info);
13046 
13047     return img_format("SDC1XS %s, %s(%s)", ft, rs, rt);
13048 }
13049 
13050 
13051 /*
13052  *
13053  *
13054  *   3         2         1
13055  *  10987654321098765432109876543210
13056  *  001000               01001001101
13057  *     rt -----
13058  *          rs -----
13059  *               rd -----
13060  */
13061 static char *SDC2(uint64 instruction, Dis_info *info)
13062 {
13063     uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
13064     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13065     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13066 
13067     const char *rs = GPR(rs_value, info);
13068 
13069     return img_format("SDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
13070                       cs_value, s_value, rs);
13071 }
13072 
13073 
13074 /*
13075  *
13076  *
13077  *   3         2         1
13078  *  10987654321098765432109876543210
13079  *  001000               01001001101
13080  *     rt -----
13081  *          rs -----
13082  *               rd -----
13083  */
13084 static char *SDM(uint64 instruction, Dis_info *info)
13085 {
13086     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13087     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13088     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13089     uint64 count3_value = extract_count3_14_13_12(instruction);
13090 
13091     const char *rt = GPR(rt_value, info);
13092     const char *rs = GPR(rs_value, info);
13093     uint64 count3 = encode_count3_from_count(count3_value);
13094 
13095     return img_format("SDM %s, %" PRId64 "(%s), 0x%" PRIx64,
13096                       rt, s_value, rs, count3);
13097 }
13098 
13099 
13100 /*
13101  *
13102  *
13103  *   3         2         1
13104  *  10987654321098765432109876543210
13105  *  001000               01001001101
13106  *     rt -----
13107  *          rs -----
13108  *               rd -----
13109  */
13110 static char *SDPC_48_(uint64 instruction, Dis_info *info)
13111 {
13112     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13113     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13114 
13115     const char *rt = GPR(rt_value, info);
13116     g_autofree char *s = ADDRESS(s_value, 6, info);
13117 
13118     return img_format("SDPC %s, %s", rt, s);
13119 }
13120 
13121 
13122 /*
13123  *
13124  *
13125  *   3         2         1
13126  *  10987654321098765432109876543210
13127  *  001000               01001001101
13128  *     rt -----
13129  *          rs -----
13130  *               rd -----
13131  */
13132 static char *SDXS(uint64 instruction, Dis_info *info)
13133 {
13134     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13135     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13136     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13137 
13138     const char *rd = GPR(rd_value, info);
13139     const char *rs = GPR(rs_value, info);
13140     const char *rt = GPR(rt_value, info);
13141 
13142     return img_format("SDXS %s, %s(%s)", rd, rs, rt);
13143 }
13144 
13145 
13146 /*
13147  *
13148  *
13149  *   3         2         1
13150  *  10987654321098765432109876543210
13151  *  001000               01001001101
13152  *     rt -----
13153  *          rs -----
13154  *               rd -----
13155  */
13156 static char *SDX(uint64 instruction, Dis_info *info)
13157 {
13158     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13159     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13160     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13161 
13162     const char *rd = GPR(rd_value, info);
13163     const char *rs = GPR(rs_value, info);
13164     const char *rt = GPR(rt_value, info);
13165 
13166     return img_format("SDX %s, %s(%s)", rd, rs, rt);
13167 }
13168 
13169 
13170 /*
13171  *
13172  *
13173  *   3         2         1
13174  *  10987654321098765432109876543210
13175  *  001000               01001001101
13176  *     rt -----
13177  *          rs -----
13178  *               rd -----
13179  */
13180 static char *SEB(uint64 instruction, Dis_info *info)
13181 {
13182     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13183     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13184 
13185     const char *rt = GPR(rt_value, info);
13186     const char *rs = GPR(rs_value, info);
13187 
13188     return img_format("SEB %s, %s", rt, rs);
13189 }
13190 
13191 
13192 /*
13193  *
13194  *
13195  *   3         2         1
13196  *  10987654321098765432109876543210
13197  *  001000               01001001101
13198  *     rt -----
13199  *          rs -----
13200  *               rd -----
13201  */
13202 static char *SEH(uint64 instruction, Dis_info *info)
13203 {
13204     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13205     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13206 
13207     const char *rt = GPR(rt_value, info);
13208     const char *rs = GPR(rs_value, info);
13209 
13210     return img_format("SEH %s, %s", rt, rs);
13211 }
13212 
13213 
13214 /*
13215  *
13216  *
13217  *   3         2         1
13218  *  10987654321098765432109876543210
13219  *  001000               01001001101
13220  *     rt -----
13221  *          rs -----
13222  *               rd -----
13223  */
13224 static char *SEL_D(uint64 instruction, Dis_info *info)
13225 {
13226     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13227     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13228     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13229 
13230     const char *fd = FPR(fd_value, info);
13231     const char *fs = FPR(fs_value, info);
13232     const char *ft = FPR(ft_value, info);
13233 
13234     return img_format("SEL.D %s, %s, %s", fd, fs, ft);
13235 }
13236 
13237 
13238 /*
13239  *
13240  *
13241  *   3         2         1
13242  *  10987654321098765432109876543210
13243  *  001000               01001001101
13244  *     rt -----
13245  *          rs -----
13246  *               rd -----
13247  */
13248 static char *SEL_S(uint64 instruction, Dis_info *info)
13249 {
13250     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13251     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13252     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13253 
13254     const char *fd = FPR(fd_value, info);
13255     const char *fs = FPR(fs_value, info);
13256     const char *ft = FPR(ft_value, info);
13257 
13258     return img_format("SEL.S %s, %s, %s", fd, fs, ft);
13259 }
13260 
13261 
13262 /*
13263  *
13264  *
13265  *   3         2         1
13266  *  10987654321098765432109876543210
13267  *  001000               01001001101
13268  *     rt -----
13269  *          rs -----
13270  *               rd -----
13271  */
13272 static char *SELEQZ_D(uint64 instruction, Dis_info *info)
13273 {
13274     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13275     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13276     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13277 
13278     const char *fd = FPR(fd_value, info);
13279     const char *fs = FPR(fs_value, info);
13280     const char *ft = FPR(ft_value, info);
13281 
13282     return img_format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13283 }
13284 
13285 
13286 /*
13287  *
13288  *
13289  *   3         2         1
13290  *  10987654321098765432109876543210
13291  *  001000               01001001101
13292  *     rt -----
13293  *          rs -----
13294  *               rd -----
13295  */
13296 static char *SELEQZ_S(uint64 instruction, Dis_info *info)
13297 {
13298     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13299     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13300     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13301 
13302     const char *fd = FPR(fd_value, info);
13303     const char *fs = FPR(fs_value, info);
13304     const char *ft = FPR(ft_value, info);
13305 
13306     return img_format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13307 }
13308 
13309 
13310 /*
13311  *
13312  *
13313  *   3         2         1
13314  *  10987654321098765432109876543210
13315  *  001000               01001001101
13316  *     rt -----
13317  *          rs -----
13318  *               rd -----
13319  */
13320 static char *SELNEZ_D(uint64 instruction, Dis_info *info)
13321 {
13322     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13323     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13324     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13325 
13326     const char *fd = FPR(fd_value, info);
13327     const char *fs = FPR(fs_value, info);
13328     const char *ft = FPR(ft_value, info);
13329 
13330     return img_format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13331 }
13332 
13333 
13334 /*
13335  *
13336  *
13337  *   3         2         1
13338  *  10987654321098765432109876543210
13339  *  001000               01001001101
13340  *     rt -----
13341  *          rs -----
13342  *               rd -----
13343  */
13344 static char *SELNEZ_S(uint64 instruction, Dis_info *info)
13345 {
13346     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13347     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13348     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13349 
13350     const char *fd = FPR(fd_value, info);
13351     const char *fs = FPR(fs_value, info);
13352     const char *ft = FPR(ft_value, info);
13353 
13354     return img_format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13355 }
13356 
13357 
13358 /*
13359  *
13360  *
13361  *   3         2         1
13362  *  10987654321098765432109876543210
13363  *  001000               01001001101
13364  *     rt -----
13365  *          rs -----
13366  *               rd -----
13367  */
13368 static char *SEQI(uint64 instruction, Dis_info *info)
13369 {
13370     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13371     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13372     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13373 
13374     const char *rt = GPR(rt_value, info);
13375     const char *rs = GPR(rs_value, info);
13376 
13377     return img_format("SEQI %s, %s, 0x%" PRIx64, rt, rs, u_value);
13378 }
13379 
13380 
13381 /*
13382  *
13383  *
13384  *   3         2         1
13385  *  10987654321098765432109876543210
13386  *  001000               01001001101
13387  *     rt -----
13388  *          rs -----
13389  *               rd -----
13390  */
13391 static char *SH_16_(uint64 instruction, Dis_info *info)
13392 {
13393     uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13394     uint64 rs3_value = extract_rs3_6_5_4(instruction);
13395     uint64 u_value = extract_u_2_1__s1(instruction);
13396 
13397     const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
13398     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
13399 
13400     return img_format("SH %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
13401 }
13402 
13403 
13404 /*
13405  *
13406  *
13407  *   3         2         1
13408  *  10987654321098765432109876543210
13409  *  001000               01001001101
13410  *     rt -----
13411  *          rs -----
13412  *               rd -----
13413  */
13414 static char *SH_GP_(uint64 instruction, Dis_info *info)
13415 {
13416     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13417     uint64 u_value = extract_u_17_to_1__s1(instruction);
13418 
13419     const char *rt = GPR(rt_value, info);
13420 
13421     return img_format("SH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
13422 }
13423 
13424 
13425 /*
13426  *
13427  *
13428  *   3         2         1
13429  *  10987654321098765432109876543210
13430  *  001000               01001001101
13431  *     rt -----
13432  *          rs -----
13433  *               rd -----
13434  */
13435 static char *SH_S9_(uint64 instruction, Dis_info *info)
13436 {
13437     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13438     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13439     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13440 
13441     const char *rt = GPR(rt_value, info);
13442     const char *rs = GPR(rs_value, info);
13443 
13444     return img_format("SH %s, %" PRId64 "(%s)", rt, s_value, rs);
13445 }
13446 
13447 
13448 /*
13449  *
13450  *
13451  *   3         2         1
13452  *  10987654321098765432109876543210
13453  *  001000               01001001101
13454  *     rt -----
13455  *          rs -----
13456  *               rd -----
13457  */
13458 static char *SH_U12_(uint64 instruction, Dis_info *info)
13459 {
13460     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13461     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13462     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13463 
13464     const char *rt = GPR(rt_value, info);
13465     const char *rs = GPR(rs_value, info);
13466 
13467     return img_format("SH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
13468 }
13469 
13470 
13471 /*
13472  *
13473  *
13474  *   3         2         1
13475  *  10987654321098765432109876543210
13476  *  001000               01001001101
13477  *     rt -----
13478  *          rs -----
13479  *               rd -----
13480  */
13481 static char *SHE(uint64 instruction, Dis_info *info)
13482 {
13483     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13484     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13485     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13486 
13487     const char *rt = GPR(rt_value, info);
13488     const char *rs = GPR(rs_value, info);
13489 
13490     return img_format("SHE %s, %" PRId64 "(%s)", rt, s_value, rs);
13491 }
13492 
13493 
13494 /*
13495  * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13496  *   the same accumulator
13497  *
13498  *   3         2         1
13499  *  10987654321098765432109876543210
13500  *  001000xxxx        xxxx0000011101
13501  *      shift ------
13502  *               ac --
13503  */
13504 static char *SHILO(uint64 instruction, Dis_info *info)
13505 {
13506     int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13507     uint64 ac_value = extract_ac_15_14(instruction);
13508 
13509     const char *ac = AC(ac_value, info);
13510 
13511     return img_format("SHILO %s, 0x%" PRIx64, ac, shift_value);
13512 }
13513 
13514 
13515 /*
13516  * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13517  *   in the same accumulator
13518  *
13519  *   3         2         1
13520  *  10987654321098765432109876543210
13521  *  001000xxxxx       01001001111111
13522  *          rs -----
13523  *               ac --
13524  */
13525 static char *SHILOV(uint64 instruction, Dis_info *info)
13526 {
13527     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13528     uint64 ac_value = extract_ac_15_14(instruction);
13529 
13530     const char *rs = GPR(rs_value, info);
13531     const char *ac = AC(ac_value, info);
13532 
13533     return img_format("SHILOV %s, %s", ac, rs);
13534 }
13535 
13536 
13537 /*
13538  * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13539  *
13540  *   3         2         1
13541  *  10987654321098765432109876543210
13542  *  001000              001110110101
13543  *     rt -----
13544  *          rs -----
13545  *               sa ----
13546  */
13547 static char *SHLL_PH(uint64 instruction, Dis_info *info)
13548 {
13549     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13550     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13551     uint64 sa_value = extract_sa_15_14_13_12(instruction);
13552 
13553     const char *rt = GPR(rt_value, info);
13554     const char *rs = GPR(rs_value, info);
13555 
13556     return img_format("SHLL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13557 }
13558 
13559 
13560 /*
13561  * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
13562  *
13563  *   3         2         1
13564  *  10987654321098765432109876543210
13565  *  001000             0100001111111
13566  *     rt -----
13567  *          rs -----
13568  *               sa ---
13569  */
13570 static char *SHLL_QB(uint64 instruction, Dis_info *info)
13571 {
13572     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13573     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13574     uint64 sa_value = extract_sa_15_14_13(instruction);
13575 
13576     const char *rt = GPR(rt_value, info);
13577     const char *rs = GPR(rs_value, info);
13578 
13579     return img_format("SHLL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13580 }
13581 
13582 
13583 /*
13584  * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
13585  *   with saturation
13586  *
13587  *   3         2         1
13588  *  10987654321098765432109876543210
13589  *  001000              001110110101
13590  *     rt -----
13591  *          rs -----
13592  *               sa ----
13593  */
13594 static char *SHLL_S_PH(uint64 instruction, Dis_info *info)
13595 {
13596     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13597     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13598     uint64 sa_value = extract_sa_15_14_13_12(instruction);
13599 
13600     const char *rt = GPR(rt_value, info);
13601     const char *rs = GPR(rs_value, info);
13602 
13603     return img_format("SHLL_S.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13604 }
13605 
13606 
13607 /*
13608  * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
13609  *
13610  *   3         2         1
13611  *  10987654321098765432109876543210
13612  *  001000               x1111110101
13613  *     rt -----
13614  *          rs -----
13615  *               sa -----
13616  */
13617 static char *SHLL_S_W(uint64 instruction, Dis_info *info)
13618 {
13619     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13620     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13621     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13622 
13623     const char *rt = GPR(rt_value, info);
13624     const char *rs = GPR(rs_value, info);
13625 
13626     return img_format("SHLL_S.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13627 }
13628 
13629 
13630 /*
13631  * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13632  *   halfwords
13633  *
13634  *   3         2         1
13635  *  10987654321098765432109876543210
13636  *  001000               01110001101
13637  *     rt -----
13638  *          rs -----
13639  *               rd -----
13640  */
13641 static char *SHLLV_PH(uint64 instruction, Dis_info *info)
13642 {
13643     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13644     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13645     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13646 
13647     const char *rd = GPR(rd_value, info);
13648     const char *rt = GPR(rt_value, info);
13649     const char *rs = GPR(rs_value, info);
13650 
13651     return img_format("SHLLV.PH %s, %s, %s", rd, rt, rs);
13652 }
13653 
13654 
13655 /*
13656  * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
13657  *
13658  *   3         2         1
13659  *  10987654321098765432109876543210
13660  *  001000               x1110010101
13661  *     rt -----
13662  *          rs -----
13663  *               rd -----
13664  */
13665 static char *SHLLV_QB(uint64 instruction, Dis_info *info)
13666 {
13667     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13668     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13669     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13670 
13671     const char *rd = GPR(rd_value, info);
13672     const char *rt = GPR(rt_value, info);
13673     const char *rs = GPR(rs_value, info);
13674 
13675     return img_format("SHLLV.QB %s, %s, %s", rd, rt, rs);
13676 }
13677 
13678 
13679 /*
13680  * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13681  *   halfwords with saturation
13682  *
13683  *   3         2         1
13684  *  10987654321098765432109876543210
13685  *  001000               11110001101
13686  *     rt -----
13687  *          rs -----
13688  *               rd -----
13689  */
13690 static char *SHLLV_S_PH(uint64 instruction, Dis_info *info)
13691 {
13692     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13693     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13694     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13695 
13696     const char *rd = GPR(rd_value, info);
13697     const char *rt = GPR(rt_value, info);
13698     const char *rs = GPR(rs_value, info);
13699 
13700     return img_format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
13701 }
13702 
13703 
13704 /*
13705  * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
13706  *
13707  *   3         2         1
13708  *  10987654321098765432109876543210
13709  *  001000               x1111010101
13710  *     rt -----
13711  *          rs -----
13712  *               rd -----
13713  */
13714 static char *SHLLV_S_W(uint64 instruction, Dis_info *info)
13715 {
13716     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13717     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13718     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13719 
13720     const char *rd = GPR(rd_value, info);
13721     const char *rt = GPR(rt_value, info);
13722     const char *rs = GPR(rs_value, info);
13723 
13724     return img_format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
13725 }
13726 
13727 
13728 /*
13729  *
13730  *
13731  *   3         2         1
13732  *  10987654321098765432109876543210
13733  *  001000               01001001101
13734  *     rt -----
13735  *          rs -----
13736  *               rd -----
13737  */
13738 static char *SHRA_PH(uint64 instruction, Dis_info *info)
13739 {
13740     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13741     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13742     uint64 sa_value = extract_sa_15_14_13_12(instruction);
13743 
13744     const char *rt = GPR(rt_value, info);
13745     const char *rs = GPR(rs_value, info);
13746 
13747     return img_format("SHRA.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13748 }
13749 
13750 
13751 /*
13752  *
13753  *
13754  *   3         2         1
13755  *  10987654321098765432109876543210
13756  *  001000               01001001101
13757  *     rt -----
13758  *          rs -----
13759  *               rd -----
13760  */
13761 static char *SHRA_QB(uint64 instruction, Dis_info *info)
13762 {
13763     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13764     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13765     uint64 sa_value = extract_sa_15_14_13(instruction);
13766 
13767     const char *rt = GPR(rt_value, info);
13768     const char *rs = GPR(rs_value, info);
13769 
13770     return img_format("SHRA.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13771 }
13772 
13773 
13774 /*
13775  *
13776  *
13777  *   3         2         1
13778  *  10987654321098765432109876543210
13779  *  001000               01001001101
13780  *     rt -----
13781  *          rs -----
13782  *               rd -----
13783  */
13784 static char *SHRA_R_PH(uint64 instruction, Dis_info *info)
13785 {
13786     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13787     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13788     uint64 sa_value = extract_sa_15_14_13_12(instruction);
13789 
13790     const char *rt = GPR(rt_value, info);
13791     const char *rs = GPR(rs_value, info);
13792 
13793     return img_format("SHRA_R.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13794 }
13795 
13796 
13797 /*
13798  *
13799  *
13800  *   3         2         1
13801  *  10987654321098765432109876543210
13802  *  001000               01001001101
13803  *     rt -----
13804  *          rs -----
13805  *               rd -----
13806  */
13807 static char *SHRA_R_QB(uint64 instruction, Dis_info *info)
13808 {
13809     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13810     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13811     uint64 sa_value = extract_sa_15_14_13(instruction);
13812 
13813     const char *rt = GPR(rt_value, info);
13814     const char *rs = GPR(rs_value, info);
13815 
13816     return img_format("SHRA_R.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13817 }
13818 
13819 
13820 /*
13821  *
13822  *
13823  *   3         2         1
13824  *  10987654321098765432109876543210
13825  *  001000               01001001101
13826  *     rt -----
13827  *          rs -----
13828  *               rd -----
13829  */
13830 static char *SHRA_R_W(uint64 instruction, Dis_info *info)
13831 {
13832     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13833     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13834     uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13835 
13836     const char *rt = GPR(rt_value, info);
13837     const char *rs = GPR(rs_value, info);
13838 
13839     return img_format("SHRA_R.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13840 }
13841 
13842 
13843 /*
13844  *
13845  *
13846  *   3         2         1
13847  *  10987654321098765432109876543210
13848  *  001000               01001001101
13849  *     rt -----
13850  *          rs -----
13851  *               rd -----
13852  */
13853 static char *SHRAV_PH(uint64 instruction, Dis_info *info)
13854 {
13855     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13856     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13857     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13858 
13859     const char *rd = GPR(rd_value, info);
13860     const char *rt = GPR(rt_value, info);
13861     const char *rs = GPR(rs_value, info);
13862 
13863     return img_format("SHRAV.PH %s, %s, %s", rd, rt, rs);
13864 }
13865 
13866 
13867 /*
13868  *
13869  *
13870  *   3         2         1
13871  *  10987654321098765432109876543210
13872  *  001000               01001001101
13873  *     rt -----
13874  *          rs -----
13875  *               rd -----
13876  */
13877 static char *SHRAV_QB(uint64 instruction, Dis_info *info)
13878 {
13879     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13880     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13881     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13882 
13883     const char *rd = GPR(rd_value, info);
13884     const char *rt = GPR(rt_value, info);
13885     const char *rs = GPR(rs_value, info);
13886 
13887     return img_format("SHRAV.QB %s, %s, %s", rd, rt, rs);
13888 }
13889 
13890 
13891 /*
13892  *
13893  *
13894  *   3         2         1
13895  *  10987654321098765432109876543210
13896  *  001000               01001001101
13897  *     rt -----
13898  *          rs -----
13899  *               rd -----
13900  */
13901 static char *SHRAV_R_PH(uint64 instruction, Dis_info *info)
13902 {
13903     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13904     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13905     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13906 
13907     const char *rd = GPR(rd_value, info);
13908     const char *rt = GPR(rt_value, info);
13909     const char *rs = GPR(rs_value, info);
13910 
13911     return img_format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
13912 }
13913 
13914 
13915 /*
13916  *
13917  *
13918  *   3         2         1
13919  *  10987654321098765432109876543210
13920  *  001000               01001001101
13921  *     rt -----
13922  *          rs -----
13923  *               rd -----
13924  */
13925 static char *SHRAV_R_QB(uint64 instruction, Dis_info *info)
13926 {
13927     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13928     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13929     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13930 
13931     const char *rd = GPR(rd_value, info);
13932     const char *rt = GPR(rt_value, info);
13933     const char *rs = GPR(rs_value, info);
13934 
13935     return img_format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
13936 }
13937 
13938 
13939 /*
13940  *
13941  *
13942  *   3         2         1
13943  *  10987654321098765432109876543210
13944  *  001000               01001001101
13945  *     rt -----
13946  *          rs -----
13947  *               rd -----
13948  */
13949 static char *SHRAV_R_W(uint64 instruction, Dis_info *info)
13950 {
13951     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13952     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13953     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13954 
13955     const char *rd = GPR(rd_value, info);
13956     const char *rt = GPR(rt_value, info);
13957     const char *rs = GPR(rs_value, info);
13958 
13959     return img_format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
13960 }
13961 
13962 
13963 /*
13964  * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
13965  *
13966  *   3         2         1
13967  *  10987654321098765432109876543210
13968  *  001000              001111111111
13969  *     rt -----
13970  *          rs -----
13971  *               sa ----
13972  */
13973 static char *SHRL_PH(uint64 instruction, Dis_info *info)
13974 {
13975     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13976     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13977     uint64 sa_value = extract_sa_15_14_13_12(instruction);
13978 
13979     const char *rt = GPR(rt_value, info);
13980     const char *rs = GPR(rs_value, info);
13981 
13982     return img_format("SHRL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13983 }
13984 
13985 
13986 /*
13987  * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
13988  *
13989  *   3         2         1
13990  *  10987654321098765432109876543210
13991  *  001000             1100001111111
13992  *     rt -----
13993  *          rs -----
13994  *               sa ---
13995  */
13996 static char *SHRL_QB(uint64 instruction, Dis_info *info)
13997 {
13998     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13999     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14000     uint64 sa_value = extract_sa_15_14_13(instruction);
14001 
14002     const char *rt = GPR(rt_value, info);
14003     const char *rs = GPR(rs_value, info);
14004 
14005     return img_format("SHRL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
14006 }
14007 
14008 
14009 /*
14010  * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14011  *   halfwords
14012  *
14013  *   3         2         1
14014  *  10987654321098765432109876543210
14015  *  001000               x1100010101
14016  *     rt -----
14017  *          rs -----
14018  *               rd -----
14019  */
14020 static char *SHRLV_PH(uint64 instruction, Dis_info *info)
14021 {
14022     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14023     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14024     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14025 
14026     const char *rd = GPR(rd_value, info);
14027     const char *rt = GPR(rt_value, info);
14028     const char *rs = GPR(rs_value, info);
14029 
14030     return img_format("SHRLV.PH %s, %s, %s", rd, rt, rs);
14031 }
14032 
14033 
14034 /*
14035  * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
14036  *
14037  *   3         2         1
14038  *  10987654321098765432109876543210
14039  *  001000               x1101010101
14040  *     rt -----
14041  *          rs -----
14042  *               rd -----
14043  */
14044 static char *SHRLV_QB(uint64 instruction, Dis_info *info)
14045 {
14046     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14047     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14048     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14049 
14050     const char *rd = GPR(rd_value, info);
14051     const char *rt = GPR(rt_value, info);
14052     const char *rs = GPR(rs_value, info);
14053 
14054     return img_format("SHRLV.QB %s, %s, %s", rd, rt, rs);
14055 }
14056 
14057 
14058 /*
14059  *
14060  *
14061  *   3         2         1
14062  *  10987654321098765432109876543210
14063  *  001000               01001001101
14064  *     rt -----
14065  *          rs -----
14066  *               rd -----
14067  */
14068 static char *SHX(uint64 instruction, Dis_info *info)
14069 {
14070     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14071     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14072     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14073 
14074     const char *rd = GPR(rd_value, info);
14075     const char *rs = GPR(rs_value, info);
14076     const char *rt = GPR(rt_value, info);
14077 
14078     return img_format("SHX %s, %s(%s)", rd, rs, rt);
14079 }
14080 
14081 
14082 /*
14083  *
14084  *
14085  *   3         2         1
14086  *  10987654321098765432109876543210
14087  *  001000               01001001101
14088  *     rt -----
14089  *          rs -----
14090  *               rd -----
14091  */
14092 static char *SHXS(uint64 instruction, Dis_info *info)
14093 {
14094     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14095     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14096     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14097 
14098     const char *rd = GPR(rd_value, info);
14099     const char *rs = GPR(rs_value, info);
14100     const char *rt = GPR(rt_value, info);
14101 
14102     return img_format("SHXS %s, %s(%s)", rd, rs, rt);
14103 }
14104 
14105 
14106 /*
14107  *
14108  *
14109  *   3         2         1
14110  *  10987654321098765432109876543210
14111  *  001000               01001001101
14112  *     rt -----
14113  *          rs -----
14114  *               rd -----
14115  */
14116 static char *SIGRIE(uint64 instruction, Dis_info *info)
14117 {
14118     uint64 code_value = extract_code_18_to_0(instruction);
14119 
14120 
14121     return img_format("SIGRIE 0x%" PRIx64, code_value);
14122 }
14123 
14124 
14125 /*
14126  *
14127  *
14128  *   3         2         1
14129  *  10987654321098765432109876543210
14130  *  001000               01001001101
14131  *     rt -----
14132  *          rs -----
14133  *               rd -----
14134  */
14135 static char *SLL_16_(uint64 instruction, Dis_info *info)
14136 {
14137     uint64 rt3_value = extract_rt3_9_8_7(instruction);
14138     uint64 rs3_value = extract_rs3_6_5_4(instruction);
14139     uint64 shift3_value = extract_shift3_2_1_0(instruction);
14140 
14141     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14142     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14143     uint64 shift3 = encode_shift3_from_shift(shift3_value);
14144 
14145     return img_format("SLL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14146 }
14147 
14148 
14149 /*
14150  *
14151  *
14152  *   3         2         1
14153  *  10987654321098765432109876543210
14154  *  001000               01001001101
14155  *     rt -----
14156  *          rs -----
14157  *               rd -----
14158  */
14159 static char *SLL_32_(uint64 instruction, Dis_info *info)
14160 {
14161     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14162     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14163     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14164 
14165     const char *rt = GPR(rt_value, info);
14166     const char *rs = GPR(rs_value, info);
14167 
14168     return img_format("SLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14169 }
14170 
14171 
14172 /*
14173  *
14174  *
14175  *   3         2         1
14176  *  10987654321098765432109876543210
14177  *  001000               01001001101
14178  *     rt -----
14179  *          rs -----
14180  *               rd -----
14181  */
14182 static char *SLLV(uint64 instruction, Dis_info *info)
14183 {
14184     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14185     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14186     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14187 
14188     const char *rd = GPR(rd_value, info);
14189     const char *rs = GPR(rs_value, info);
14190     const char *rt = GPR(rt_value, info);
14191 
14192     return img_format("SLLV %s, %s, %s", rd, rs, rt);
14193 }
14194 
14195 
14196 /*
14197  *
14198  *
14199  *   3         2         1
14200  *  10987654321098765432109876543210
14201  *  001000               01001001101
14202  *     rt -----
14203  *          rs -----
14204  *               rd -----
14205  */
14206 static char *SLT(uint64 instruction, Dis_info *info)
14207 {
14208     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14209     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14210     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14211 
14212     const char *rd = GPR(rd_value, info);
14213     const char *rs = GPR(rs_value, info);
14214     const char *rt = GPR(rt_value, info);
14215 
14216     return img_format("SLT %s, %s, %s", rd, rs, rt);
14217 }
14218 
14219 
14220 /*
14221  *
14222  *
14223  *   3         2         1
14224  *  10987654321098765432109876543210
14225  *  001000               01001001101
14226  *     rt -----
14227  *          rs -----
14228  *               rd -----
14229  */
14230 static char *SLTI(uint64 instruction, Dis_info *info)
14231 {
14232     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14233     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14234     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14235 
14236     const char *rt = GPR(rt_value, info);
14237     const char *rs = GPR(rs_value, info);
14238 
14239     return img_format("SLTI %s, %s, 0x%" PRIx64, rt, rs, u_value);
14240 }
14241 
14242 
14243 /*
14244  *
14245  *
14246  *   3         2         1
14247  *  10987654321098765432109876543210
14248  *  001000               01001001101
14249  *     rt -----
14250  *          rs -----
14251  *               rd -----
14252  */
14253 static char *SLTIU(uint64 instruction, Dis_info *info)
14254 {
14255     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14256     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14257     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14258 
14259     const char *rt = GPR(rt_value, info);
14260     const char *rs = GPR(rs_value, info);
14261 
14262     return img_format("SLTIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
14263 }
14264 
14265 
14266 /*
14267  *
14268  *
14269  *   3         2         1
14270  *  10987654321098765432109876543210
14271  *  001000               01001001101
14272  *     rt -----
14273  *          rs -----
14274  *               rd -----
14275  */
14276 static char *SLTU(uint64 instruction, Dis_info *info)
14277 {
14278     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14279     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14280     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14281 
14282     const char *rd = GPR(rd_value, info);
14283     const char *rs = GPR(rs_value, info);
14284     const char *rt = GPR(rt_value, info);
14285 
14286     return img_format("SLTU %s, %s, %s", rd, rs, rt);
14287 }
14288 
14289 
14290 /*
14291  *
14292  *
14293  *   3         2         1
14294  *  10987654321098765432109876543210
14295  *  001000               01001001101
14296  *     rt -----
14297  *          rs -----
14298  *               rd -----
14299  */
14300 static char *SOV(uint64 instruction, Dis_info *info)
14301 {
14302     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14303     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14304     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14305 
14306     const char *rd = GPR(rd_value, info);
14307     const char *rs = GPR(rs_value, info);
14308     const char *rt = GPR(rt_value, info);
14309 
14310     return img_format("SOV %s, %s, %s", rd, rs, rt);
14311 }
14312 
14313 
14314 /*
14315  *
14316  *
14317  *   3         2         1
14318  *  10987654321098765432109876543210
14319  *  001000               01001001101
14320  *     rt -----
14321  *          rs -----
14322  *               rd -----
14323  */
14324 static char *SPECIAL2(uint64 instruction, Dis_info *info)
14325 {
14326     uint64 op_value = extract_op_25_to_3(instruction);
14327 
14328 
14329     return img_format("SPECIAL2 0x%" PRIx64, op_value);
14330 }
14331 
14332 
14333 /*
14334  *
14335  *
14336  *   3         2         1
14337  *  10987654321098765432109876543210
14338  *  001000               01001001101
14339  *     rt -----
14340  *          rs -----
14341  *               rd -----
14342  */
14343 static char *SQRT_D(uint64 instruction, Dis_info *info)
14344 {
14345     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14346     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14347 
14348     const char *ft = FPR(ft_value, info);
14349     const char *fs = FPR(fs_value, info);
14350 
14351     return img_format("SQRT.D %s, %s", ft, fs);
14352 }
14353 
14354 
14355 /*
14356  *
14357  *
14358  *   3         2         1
14359  *  10987654321098765432109876543210
14360  *  001000               01001001101
14361  *     rt -----
14362  *          rs -----
14363  *               rd -----
14364  */
14365 static char *SQRT_S(uint64 instruction, Dis_info *info)
14366 {
14367     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14368     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14369 
14370     const char *ft = FPR(ft_value, info);
14371     const char *fs = FPR(fs_value, info);
14372 
14373     return img_format("SQRT.S %s, %s", ft, fs);
14374 }
14375 
14376 
14377 /*
14378  * SRA rd, rt, sa - Shift Word Right Arithmetic
14379  *
14380  *   3         2         1
14381  *  10987654321098765432109876543210
14382  *  00000000000               000011
14383  *          rt -----
14384  *               rd -----
14385  *                    sa -----
14386  */
14387 static char *SRA(uint64 instruction, Dis_info *info)
14388 {
14389     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14390     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14391     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14392 
14393     const char *rt = GPR(rt_value, info);
14394     const char *rs = GPR(rs_value, info);
14395 
14396     return img_format("SRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14397 }
14398 
14399 
14400 /*
14401  * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14402  *
14403  *   3         2         1
14404  *  10987654321098765432109876543210
14405  *  001000               00000000111
14406  *     rs -----
14407  *          rt -----
14408  *               rd -----
14409  */
14410 static char *SRAV(uint64 instruction, Dis_info *info)
14411 {
14412     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14413     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14414     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14415 
14416     const char *rd = GPR(rd_value, info);
14417     const char *rs = GPR(rs_value, info);
14418     const char *rt = GPR(rt_value, info);
14419 
14420     return img_format("SRAV %s, %s, %s", rd, rs, rt);
14421 }
14422 
14423 
14424 /*
14425  *
14426  *
14427  *   3         2         1
14428  *  10987654321098765432109876543210
14429  *  001000               00000000111
14430  *     rs -----
14431  *          rt -----
14432  *               rd -----
14433  */
14434 static char *SRL_16_(uint64 instruction, Dis_info *info)
14435 {
14436     uint64 rt3_value = extract_rt3_9_8_7(instruction);
14437     uint64 rs3_value = extract_rs3_6_5_4(instruction);
14438     uint64 shift3_value = extract_shift3_2_1_0(instruction);
14439 
14440     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14441     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14442     uint64 shift3 = encode_shift3_from_shift(shift3_value);
14443 
14444     return img_format("SRL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14445 }
14446 
14447 
14448 /*
14449  *
14450  *
14451  *   3         2         1
14452  *  10987654321098765432109876543210
14453  *  001000               01001001101
14454  *     rt -----
14455  *          rs -----
14456  *               rd -----
14457  */
14458 static char *SRL_32_(uint64 instruction, Dis_info *info)
14459 {
14460     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14461     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14462     uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14463 
14464     const char *rt = GPR(rt_value, info);
14465     const char *rs = GPR(rs_value, info);
14466 
14467     return img_format("SRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14468 }
14469 
14470 
14471 /*
14472  *
14473  *
14474  *   3         2         1
14475  *  10987654321098765432109876543210
14476  *  001000               01001001101
14477  *     rt -----
14478  *          rs -----
14479  *               rd -----
14480  */
14481 static char *SRLV(uint64 instruction, Dis_info *info)
14482 {
14483     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14484     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14485     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14486 
14487     const char *rd = GPR(rd_value, info);
14488     const char *rs = GPR(rs_value, info);
14489     const char *rt = GPR(rt_value, info);
14490 
14491     return img_format("SRLV %s, %s, %s", rd, rs, rt);
14492 }
14493 
14494 
14495 /*
14496  *
14497  *
14498  *   3         2         1
14499  *  10987654321098765432109876543210
14500  *  001000               01001001101
14501  *     rt -----
14502  *          rs -----
14503  *               rd -----
14504  */
14505 static char *SUB(uint64 instruction, Dis_info *info)
14506 {
14507     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14508     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14509     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14510 
14511     const char *rd = GPR(rd_value, info);
14512     const char *rs = GPR(rs_value, info);
14513     const char *rt = GPR(rt_value, info);
14514 
14515     return img_format("SUB %s, %s, %s", rd, rs, rt);
14516 }
14517 
14518 
14519 /*
14520  *
14521  *
14522  *   3         2         1
14523  *  10987654321098765432109876543210
14524  *  001000               01001001101
14525  *     rt -----
14526  *          rs -----
14527  *               rd -----
14528  */
14529 static char *SUB_D(uint64 instruction, Dis_info *info)
14530 {
14531     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14532     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14533     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14534 
14535     const char *fd = FPR(fd_value, info);
14536     const char *fs = FPR(fs_value, info);
14537     const char *ft = FPR(ft_value, info);
14538 
14539     return img_format("SUB.D %s, %s, %s", fd, fs, ft);
14540 }
14541 
14542 
14543 /*
14544  *
14545  *
14546  *   3         2         1
14547  *  10987654321098765432109876543210
14548  *  001000               01001001101
14549  *     rt -----
14550  *          rs -----
14551  *               rd -----
14552  */
14553 static char *SUB_S(uint64 instruction, Dis_info *info)
14554 {
14555     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14556     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14557     uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14558 
14559     const char *fd = FPR(fd_value, info);
14560     const char *fs = FPR(fs_value, info);
14561     const char *ft = FPR(ft_value, info);
14562 
14563     return img_format("SUB.S %s, %s, %s", fd, fs, ft);
14564 }
14565 
14566 
14567 /*
14568  *
14569  *
14570  *   3         2         1
14571  *  10987654321098765432109876543210
14572  *  001000               01001001101
14573  *     rt -----
14574  *          rs -----
14575  *               rd -----
14576  */
14577 static char *SUBQ_PH(uint64 instruction, Dis_info *info)
14578 {
14579     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14580     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14581     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14582 
14583     const char *rd = GPR(rd_value, info);
14584     const char *rs = GPR(rs_value, info);
14585     const char *rt = GPR(rt_value, info);
14586 
14587     return img_format("SUBQ.PH %s, %s, %s", rd, rs, rt);
14588 }
14589 
14590 
14591 /*
14592  * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14593  *   right to halve results
14594  *
14595  *   3         2         1
14596  *  10987654321098765432109876543210
14597  *  001000               01001001101
14598  *     rt -----
14599  *          rs -----
14600  *               rd -----
14601  */
14602 static char *SUBQ_S_PH(uint64 instruction, Dis_info *info)
14603 {
14604     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14605     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14606     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14607 
14608     const char *rd = GPR(rd_value, info);
14609     const char *rs = GPR(rs_value, info);
14610     const char *rt = GPR(rt_value, info);
14611 
14612     return img_format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
14613 }
14614 
14615 
14616 /*
14617  * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
14618  *   right to halve results
14619  *
14620  *   3         2         1
14621  *  10987654321098765432109876543210
14622  *  001000               01001001101
14623  *     rt -----
14624  *          rs -----
14625  *               rd -----
14626  */
14627 static char *SUBQ_S_W(uint64 instruction, Dis_info *info)
14628 {
14629     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14630     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14631     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14632 
14633     const char *rd = GPR(rd_value, info);
14634     const char *rs = GPR(rs_value, info);
14635     const char *rt = GPR(rt_value, info);
14636 
14637     return img_format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
14638 }
14639 
14640 
14641 /*
14642  * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14643  *   right to halve results
14644  *
14645  *   3         2         1
14646  *  10987654321098765432109876543210
14647  *  001000               01001001101
14648  *     rt -----
14649  *          rs -----
14650  *               rd -----
14651  */
14652 static char *SUBQH_PH(uint64 instruction, Dis_info *info)
14653 {
14654     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14655     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14656     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14657 
14658     const char *rd = GPR(rd_value, info);
14659     const char *rs = GPR(rs_value, info);
14660     const char *rt = GPR(rt_value, info);
14661 
14662     return img_format("SUBQH.PH %s, %s, %s", rd, rs, rt);
14663 }
14664 
14665 
14666 /*
14667  * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14668  *   right to halve results
14669  *
14670  *   3         2         1
14671  *  10987654321098765432109876543210
14672  *  001000               01001001101
14673  *     rt -----
14674  *          rs -----
14675  *               rd -----
14676  */
14677 static char *SUBQH_R_PH(uint64 instruction, Dis_info *info)
14678 {
14679     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14680     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14681     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14682 
14683     const char *rd = GPR(rd_value, info);
14684     const char *rs = GPR(rs_value, info);
14685     const char *rt = GPR(rt_value, info);
14686 
14687     return img_format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
14688 }
14689 
14690 
14691 /*
14692  * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
14693  *   right to halve results with rounding
14694  *
14695  *   3         2         1
14696  *  10987654321098765432109876543210
14697  *  001000               11001001101
14698  *     rt -----
14699  *          rs -----
14700  *               rd -----
14701  */
14702 static char *SUBQH_R_W(uint64 instruction, Dis_info *info)
14703 {
14704     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14705     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14706     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14707 
14708     const char *rd = GPR(rd_value, info);
14709     const char *rs = GPR(rs_value, info);
14710     const char *rt = GPR(rt_value, info);
14711 
14712     return img_format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
14713 }
14714 
14715 
14716 /*
14717  * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
14718  *   halve results
14719  *
14720  *   3         2         1
14721  *  10987654321098765432109876543210
14722  *  001000               01010001101
14723  *     rt -----
14724  *          rs -----
14725  *               rd -----
14726  */
14727 static char *SUBQH_W(uint64 instruction, Dis_info *info)
14728 {
14729     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14730     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14731     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14732 
14733     const char *rd = GPR(rd_value, info);
14734     const char *rs = GPR(rs_value, info);
14735     const char *rt = GPR(rt_value, info);
14736 
14737     return img_format("SUBQH.W %s, %s, %s", rd, rs, rt);
14738 }
14739 
14740 
14741 /*
14742  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14743  *
14744  *   3         2         1
14745  *  10987654321098765432109876543210
14746  *  001000               00010001101
14747  *     rt -----
14748  *          rs -----
14749  *               rd -----
14750  */
14751 static char *SUBU_16_(uint64 instruction, Dis_info *info)
14752 {
14753     uint64 rt3_value = extract_rt3_9_8_7(instruction);
14754     uint64 rs3_value = extract_rs3_6_5_4(instruction);
14755     uint64 rd3_value = extract_rd3_3_2_1(instruction);
14756 
14757     const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
14758     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14759     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14760 
14761     return img_format("SUBU %s, %s, %s", rd3, rs3, rt3);
14762 }
14763 
14764 
14765 /*
14766  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14767  *
14768  *   3         2         1
14769  *  10987654321098765432109876543210
14770  *  001000               00010001101
14771  *     rt -----
14772  *          rs -----
14773  *               rd -----
14774  */
14775 static char *SUBU_32_(uint64 instruction, Dis_info *info)
14776 {
14777     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14778     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14779     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14780 
14781     const char *rd = GPR(rd_value, info);
14782     const char *rs = GPR(rs_value, info);
14783     const char *rt = GPR(rt_value, info);
14784 
14785     return img_format("SUBU %s, %s, %s", rd, rs, rt);
14786 }
14787 
14788 
14789 /*
14790  * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
14791  *
14792  *   3         2         1
14793  *  10987654321098765432109876543210
14794  *  001000               01100001101
14795  *     rt -----
14796  *          rs -----
14797  *               rd -----
14798  */
14799 static char *SUBU_PH(uint64 instruction, Dis_info *info)
14800 {
14801     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14802     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14803     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14804 
14805     const char *rd = GPR(rd_value, info);
14806     const char *rs = GPR(rs_value, info);
14807     const char *rt = GPR(rt_value, info);
14808 
14809     return img_format("SUBU.PH %s, %s, %s", rd, rs, rt);
14810 }
14811 
14812 
14813 /*
14814  * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
14815  *
14816  *   3         2         1
14817  *  10987654321098765432109876543210
14818  *  001000               01011001101
14819  *     rt -----
14820  *          rs -----
14821  *               rd -----
14822  */
14823 static char *SUBU_QB(uint64 instruction, Dis_info *info)
14824 {
14825     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14826     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14827     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14828 
14829     const char *rd = GPR(rd_value, info);
14830     const char *rs = GPR(rs_value, info);
14831     const char *rt = GPR(rt_value, info);
14832 
14833     return img_format("SUBU.QB %s, %s, %s", rd, rs, rt);
14834 }
14835 
14836 
14837 /*
14838  * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
14839  *   8-bit saturation
14840  *
14841  *   3         2         1
14842  *  10987654321098765432109876543210
14843  *  001000               11100001101
14844  *     rt -----
14845  *          rs -----
14846  *               rd -----
14847  */
14848 static char *SUBU_S_PH(uint64 instruction, Dis_info *info)
14849 {
14850     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14851     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14852     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14853 
14854     const char *rd = GPR(rd_value, info);
14855     const char *rs = GPR(rs_value, info);
14856     const char *rt = GPR(rt_value, info);
14857 
14858     return img_format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
14859 }
14860 
14861 
14862 /*
14863  * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
14864  *   8-bit saturation
14865  *
14866  *   3         2         1
14867  *  10987654321098765432109876543210
14868  *  001000               11011001101
14869  *     rt -----
14870  *          rs -----
14871  *               rd -----
14872  */
14873 static char *SUBU_S_QB(uint64 instruction, Dis_info *info)
14874 {
14875     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14876     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14877     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14878 
14879     const char *rd = GPR(rd_value, info);
14880     const char *rs = GPR(rs_value, info);
14881     const char *rt = GPR(rt_value, info);
14882 
14883     return img_format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
14884 }
14885 
14886 
14887 /*
14888  * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
14889  *   to halve results
14890  *
14891  *   3         2         1
14892  *  10987654321098765432109876543210
14893  *  001000               01101001101
14894  *     rt -----
14895  *          rs -----
14896  *               rd -----
14897  */
14898 static char *SUBUH_QB(uint64 instruction, Dis_info *info)
14899 {
14900     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14901     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14902     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14903 
14904     const char *rd = GPR(rd_value, info);
14905     const char *rs = GPR(rs_value, info);
14906     const char *rt = GPR(rt_value, info);
14907 
14908     return img_format("SUBUH.QB %s, %s, %s", rd, rs, rt);
14909 }
14910 
14911 
14912 /*
14913  * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
14914  *   to halve results with rounding
14915  *
14916  *   3         2         1
14917  *  10987654321098765432109876543210
14918  *  001000               11101001101
14919  *     rt -----
14920  *          rs -----
14921  *               rd -----
14922  */
14923 static char *SUBUH_R_QB(uint64 instruction, Dis_info *info)
14924 {
14925     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14926     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14927     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14928 
14929     const char *rd = GPR(rd_value, info);
14930     const char *rs = GPR(rs_value, info);
14931     const char *rt = GPR(rt_value, info);
14932 
14933     return img_format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
14934 }
14935 
14936 
14937 /*
14938  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14939  *
14940  *   3         2         1
14941  *  10987654321098765432109876543210
14942  *  001000               00010001101
14943  *     rt -----
14944  *          rs -----
14945  *               rd -----
14946  */
14947 static char *SW_16_(uint64 instruction, Dis_info *info)
14948 {
14949     uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14950     uint64 rs3_value = extract_rs3_6_5_4(instruction);
14951     uint64 u_value = extract_u_3_2_1_0__s2(instruction);
14952 
14953     const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14954     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14955 
14956     return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
14957 }
14958 
14959 
14960 /*
14961  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14962  *
14963  *   3         2         1
14964  *  10987654321098765432109876543210
14965  *  001000               00010001101
14966  *     rt -----
14967  *          rs -----
14968  *               rd -----
14969  */
14970 static char *SW_4X4_(uint64 instruction, Dis_info *info)
14971 {
14972     uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
14973     uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
14974     uint64 u_value = extract_u_3_8__s2(instruction);
14975 
14976     const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
14977     const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
14978 
14979     return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz4, u_value, rs4);
14980 }
14981 
14982 
14983 /*
14984  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14985  *
14986  *   3         2         1
14987  *  10987654321098765432109876543210
14988  *  001000               00010001101
14989  *     rt -----
14990  *          rs -----
14991  *               rd -----
14992  */
14993 static char *SW_GP16_(uint64 instruction, Dis_info *info)
14994 {
14995     uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
14996     uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14997 
14998     const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14999 
15000     return img_format("SW %s, 0x%" PRIx64 "($%d)", rtz3, u_value, 28);
15001 }
15002 
15003 
15004 /*
15005  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15006  *
15007  *   3         2         1
15008  *  10987654321098765432109876543210
15009  *  001000               00010001101
15010  *     rt -----
15011  *          rs -----
15012  *               rd -----
15013  */
15014 static char *SW_GP_(uint64 instruction, Dis_info *info)
15015 {
15016     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15017     uint64 u_value = extract_u_20_to_2__s2(instruction);
15018 
15019     const char *rt = GPR(rt_value, info);
15020 
15021     return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
15022 }
15023 
15024 
15025 /*
15026  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15027  *
15028  *   3         2         1
15029  *  10987654321098765432109876543210
15030  *  001000               00010001101
15031  *     rt -----
15032  *          rs -----
15033  *               rd -----
15034  */
15035 static char *SW_S9_(uint64 instruction, Dis_info *info)
15036 {
15037     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15038     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15039     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15040 
15041     const char *rt = GPR(rt_value, info);
15042     const char *rs = GPR(rs_value, info);
15043 
15044     return img_format("SW %s, %" PRId64 "(%s)", rt, s_value, rs);
15045 }
15046 
15047 
15048 /*
15049  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15050  *
15051  *   3         2         1
15052  *  10987654321098765432109876543210
15053  *  001000               00010001101
15054  *     rt -----
15055  *          rs -----
15056  *               rd -----
15057  */
15058 static char *SW_SP_(uint64 instruction, Dis_info *info)
15059 {
15060     uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
15061     uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
15062 
15063     const char *rt = GPR(rt_value, info);
15064 
15065     return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
15066 }
15067 
15068 
15069 /*
15070  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15071  *
15072  *   3         2         1
15073  *  10987654321098765432109876543210
15074  *  001000               00010001101
15075  *     rt -----
15076  *          rs -----
15077  *               rd -----
15078  */
15079 static char *SW_U12_(uint64 instruction, Dis_info *info)
15080 {
15081     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15082     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15083     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15084 
15085     const char *rt = GPR(rt_value, info);
15086     const char *rs = GPR(rs_value, info);
15087 
15088     return img_format("SW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
15089 }
15090 
15091 
15092 /*
15093  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15094  *
15095  *   3         2         1
15096  *  10987654321098765432109876543210
15097  *  001000               00010001101
15098  *     rt -----
15099  *          rs -----
15100  *               rd -----
15101  */
15102 static char *SWC1_GP_(uint64 instruction, Dis_info *info)
15103 {
15104     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15105     uint64 u_value = extract_u_17_to_2__s2(instruction);
15106 
15107     const char *ft = FPR(ft_value, info);
15108 
15109     return img_format("SWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
15110 }
15111 
15112 
15113 /*
15114  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15115  *
15116  *   3         2         1
15117  *  10987654321098765432109876543210
15118  *  001000               00010001101
15119  *     rt -----
15120  *          rs -----
15121  *               rd -----
15122  */
15123 static char *SWC1_S9_(uint64 instruction, Dis_info *info)
15124 {
15125     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15126     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15127     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15128 
15129     const char *ft = FPR(ft_value, info);
15130     const char *rs = GPR(rs_value, info);
15131 
15132     return img_format("SWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
15133 }
15134 
15135 
15136 /*
15137  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15138  *
15139  *   3         2         1
15140  *  10987654321098765432109876543210
15141  *  001000               00010001101
15142  *     rt -----
15143  *          rs -----
15144  *               rd -----
15145  */
15146 static char *SWC1_U12_(uint64 instruction, Dis_info *info)
15147 {
15148     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15149     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15150     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15151 
15152     const char *ft = FPR(ft_value, info);
15153     const char *rs = GPR(rs_value, info);
15154 
15155     return img_format("SWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
15156 }
15157 
15158 
15159 /*
15160  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15161  *
15162  *   3         2         1
15163  *  10987654321098765432109876543210
15164  *  001000               00010001101
15165  *     rt -----
15166  *          rs -----
15167  *               rd -----
15168  */
15169 static char *SWC1X(uint64 instruction, Dis_info *info)
15170 {
15171     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15172     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15173     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15174 
15175     const char *ft = FPR(ft_value, info);
15176     const char *rs = GPR(rs_value, info);
15177     const char *rt = GPR(rt_value, info);
15178 
15179     return img_format("SWC1X %s, %s(%s)", ft, rs, rt);
15180 }
15181 
15182 
15183 /*
15184  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15185  *
15186  *   3         2         1
15187  *  10987654321098765432109876543210
15188  *  001000               00010001101
15189  *     rt -----
15190  *          rs -----
15191  *               rd -----
15192  */
15193 static char *SWC1XS(uint64 instruction, Dis_info *info)
15194 {
15195     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15196     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15197     uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15198 
15199     const char *ft = FPR(ft_value, info);
15200     const char *rs = GPR(rs_value, info);
15201     const char *rt = GPR(rt_value, info);
15202 
15203     return img_format("SWC1XS %s, %s(%s)", ft, rs, rt);
15204 }
15205 
15206 
15207 /*
15208  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15209  *
15210  *   3         2         1
15211  *  10987654321098765432109876543210
15212  *  001000               00010001101
15213  *     rt -----
15214  *          rs -----
15215  *               rd -----
15216  */
15217 static char *SWC2(uint64 instruction, Dis_info *info)
15218 {
15219     uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15220     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15221     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15222 
15223     const char *rs = GPR(rs_value, info);
15224 
15225     return img_format("SWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
15226                       cs_value, s_value, rs);
15227 }
15228 
15229 
15230 /*
15231  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15232  *
15233  *   3         2         1
15234  *  10987654321098765432109876543210
15235  *  001000               00010001101
15236  *     rt -----
15237  *          rs -----
15238  *               rd -----
15239  */
15240 static char *SWE(uint64 instruction, Dis_info *info)
15241 {
15242     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15243     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15244     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15245 
15246     const char *rt = GPR(rt_value, info);
15247     const char *rs = GPR(rs_value, info);
15248 
15249     return img_format("SWE %s, %" PRId64 "(%s)", rt, s_value, rs);
15250 }
15251 
15252 
15253 /*
15254  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15255  *
15256  *   3         2         1
15257  *  10987654321098765432109876543210
15258  *  001000               00010001101
15259  *     rt -----
15260  *          rs -----
15261  *               rd -----
15262  */
15263 static char *SWM(uint64 instruction, Dis_info *info)
15264 {
15265     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15266     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15267     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15268     uint64 count3_value = extract_count3_14_13_12(instruction);
15269 
15270     const char *rt = GPR(rt_value, info);
15271     const char *rs = GPR(rs_value, info);
15272     uint64 count3 = encode_count3_from_count(count3_value);
15273 
15274     return img_format("SWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15275                       rt, s_value, rs, count3);
15276 }
15277 
15278 
15279 /*
15280  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15281  *
15282  *   3         2         1
15283  *  10987654321098765432109876543210
15284  *  001000               00010001101
15285  *     rt -----
15286  *          rs -----
15287  *               rd -----
15288  */
15289 static char *SWPC_48_(uint64 instruction, Dis_info *info)
15290 {
15291     uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15292     int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15293 
15294     const char *rt = GPR(rt_value, info);
15295     g_autofree char *s = ADDRESS(s_value, 6, info);
15296 
15297     return img_format("SWPC %s, %s", rt, s);
15298 }
15299 
15300 
15301 /*
15302  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15303  *
15304  *   3         2         1
15305  *  10987654321098765432109876543210
15306  *  001000               00010001101
15307  *     rt -----
15308  *          rs -----
15309  *               rd -----
15310  */
15311 static char *SWX(uint64 instruction, Dis_info *info)
15312 {
15313     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15314     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15315     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15316 
15317     const char *rd = GPR(rd_value, info);
15318     const char *rs = GPR(rs_value, info);
15319     const char *rt = GPR(rt_value, info);
15320 
15321     return img_format("SWX %s, %s(%s)", rd, rs, rt);
15322 }
15323 
15324 
15325 /*
15326  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15327  *
15328  *   3         2         1
15329  *  10987654321098765432109876543210
15330  *  001000               00010001101
15331  *     rt -----
15332  *          rs -----
15333  *               rd -----
15334  */
15335 static char *SWXS(uint64 instruction, Dis_info *info)
15336 {
15337     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15338     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15339     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15340 
15341     const char *rd = GPR(rd_value, info);
15342     const char *rs = GPR(rs_value, info);
15343     const char *rt = GPR(rt_value, info);
15344 
15345     return img_format("SWXS %s, %s(%s)", rd, rs, rt);
15346 }
15347 
15348 
15349 /*
15350  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15351  *
15352  *   3         2         1
15353  *  10987654321098765432109876543210
15354  *  001000               00010001101
15355  *     rt -----
15356  *          rs -----
15357  *               rd -----
15358  */
15359 static char *SYNC(uint64 instruction, Dis_info *info)
15360 {
15361     uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15362 
15363 
15364     return img_format("SYNC 0x%" PRIx64, stype_value);
15365 }
15366 
15367 
15368 /*
15369  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15370  *
15371  *   3         2         1
15372  *  10987654321098765432109876543210
15373  *  001000               00010001101
15374  *     rt -----
15375  *          rs -----
15376  *               rd -----
15377  */
15378 static char *SYNCI(uint64 instruction, Dis_info *info)
15379 {
15380     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15381     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15382 
15383     const char *rs = GPR(rs_value, info);
15384 
15385     return img_format("SYNCI %" PRId64 "(%s)", s_value, rs);
15386 }
15387 
15388 
15389 /*
15390  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15391  *
15392  *   3         2         1
15393  *  10987654321098765432109876543210
15394  *  001000               00010001101
15395  *     rt -----
15396  *          rs -----
15397  *               rd -----
15398  */
15399 static char *SYNCIE(uint64 instruction, Dis_info *info)
15400 {
15401     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15402     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15403 
15404     const char *rs = GPR(rs_value, info);
15405 
15406     return img_format("SYNCIE %" PRId64 "(%s)", s_value, rs);
15407 }
15408 
15409 
15410 /*
15411  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15412  *
15413  *   3         2         1
15414  *  10987654321098765432109876543210
15415  *  001000               00010001101
15416  *     rt -----
15417  *          rs -----
15418  *               rd -----
15419  */
15420 static char *SYSCALL_16_(uint64 instruction, Dis_info *info)
15421 {
15422     uint64 code_value = extract_code_1_0(instruction);
15423 
15424 
15425     return img_format("SYSCALL 0x%" PRIx64, code_value);
15426 }
15427 
15428 
15429 /*
15430  * SYSCALL code - System Call. Cause a System Call Exception
15431  *
15432  *   3         2         1
15433  *  10987654321098765432109876543210
15434  *  00000000000010
15435  *           code ------------------
15436  */
15437 static char *SYSCALL_32_(uint64 instruction, Dis_info *info)
15438 {
15439     uint64 code_value = extract_code_17_to_0(instruction);
15440 
15441 
15442     return img_format("SYSCALL 0x%" PRIx64, code_value);
15443 }
15444 
15445 
15446 /*
15447  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15448  *
15449  *   3         2         1
15450  *  10987654321098765432109876543210
15451  *  001000               00010001101
15452  *     rt -----
15453  *          rs -----
15454  *               rd -----
15455  */
15456 static char *TEQ(uint64 instruction, Dis_info *info)
15457 {
15458     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15459     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15460 
15461     const char *rs = GPR(rs_value, info);
15462     const char *rt = GPR(rt_value, info);
15463 
15464     return img_format("TEQ %s, %s", rs, rt);
15465 }
15466 
15467 
15468 /*
15469  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15470  *
15471  *   3         2         1
15472  *  10987654321098765432109876543210
15473  *  001000               00010001101
15474  *     rt -----
15475  *          rs -----
15476  *               rd -----
15477  */
15478 static char *TLBGINV(uint64 instruction, Dis_info *info)
15479 {
15480     (void)instruction;
15481 
15482     return g_strdup("TLBGINV ");
15483 }
15484 
15485 
15486 /*
15487  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15488  *
15489  *   3         2         1
15490  *  10987654321098765432109876543210
15491  *  001000               00010001101
15492  *     rt -----
15493  *          rs -----
15494  *               rd -----
15495  */
15496 static char *TLBGINVF(uint64 instruction, Dis_info *info)
15497 {
15498     (void)instruction;
15499 
15500     return g_strdup("TLBGINVF ");
15501 }
15502 
15503 
15504 /*
15505  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15506  *
15507  *   3         2         1
15508  *  10987654321098765432109876543210
15509  *  001000               00010001101
15510  *     rt -----
15511  *          rs -----
15512  *               rd -----
15513  */
15514 static char *TLBGP(uint64 instruction, Dis_info *info)
15515 {
15516     (void)instruction;
15517 
15518     return g_strdup("TLBGP ");
15519 }
15520 
15521 
15522 /*
15523  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15524  *
15525  *   3         2         1
15526  *  10987654321098765432109876543210
15527  *  001000               00010001101
15528  *     rt -----
15529  *          rs -----
15530  *               rd -----
15531  */
15532 static char *TLBGR(uint64 instruction, Dis_info *info)
15533 {
15534     (void)instruction;
15535 
15536     return g_strdup("TLBGR ");
15537 }
15538 
15539 
15540 /*
15541  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15542  *
15543  *   3         2         1
15544  *  10987654321098765432109876543210
15545  *  001000               00010001101
15546  *     rt -----
15547  *          rs -----
15548  *               rd -----
15549  */
15550 static char *TLBGWI(uint64 instruction, Dis_info *info)
15551 {
15552     (void)instruction;
15553 
15554     return g_strdup("TLBGWI ");
15555 }
15556 
15557 
15558 /*
15559  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15560  *
15561  *   3         2         1
15562  *  10987654321098765432109876543210
15563  *  001000               00010001101
15564  *     rt -----
15565  *          rs -----
15566  *               rd -----
15567  */
15568 static char *TLBGWR(uint64 instruction, Dis_info *info)
15569 {
15570     (void)instruction;
15571 
15572     return g_strdup("TLBGWR ");
15573 }
15574 
15575 
15576 /*
15577  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15578  *
15579  *   3         2         1
15580  *  10987654321098765432109876543210
15581  *  001000               00010001101
15582  *     rt -----
15583  *          rs -----
15584  *               rd -----
15585  */
15586 static char *TLBINV(uint64 instruction, Dis_info *info)
15587 {
15588     (void)instruction;
15589 
15590     return g_strdup("TLBINV ");
15591 }
15592 
15593 
15594 /*
15595  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15596  *
15597  *   3         2         1
15598  *  10987654321098765432109876543210
15599  *  001000               00010001101
15600  *     rt -----
15601  *          rs -----
15602  *               rd -----
15603  */
15604 static char *TLBINVF(uint64 instruction, Dis_info *info)
15605 {
15606     (void)instruction;
15607 
15608     return g_strdup("TLBINVF ");
15609 }
15610 
15611 
15612 /*
15613  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15614  *
15615  *   3         2         1
15616  *  10987654321098765432109876543210
15617  *  001000               00010001101
15618  *     rt -----
15619  *          rs -----
15620  *               rd -----
15621  */
15622 static char *TLBP(uint64 instruction, Dis_info *info)
15623 {
15624     (void)instruction;
15625 
15626     return g_strdup("TLBP ");
15627 }
15628 
15629 
15630 /*
15631  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15632  *
15633  *   3         2         1
15634  *  10987654321098765432109876543210
15635  *  001000               00010001101
15636  *     rt -----
15637  *          rs -----
15638  *               rd -----
15639  */
15640 static char *TLBR(uint64 instruction, Dis_info *info)
15641 {
15642     (void)instruction;
15643 
15644     return g_strdup("TLBR ");
15645 }
15646 
15647 
15648 /*
15649  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15650  *
15651  *   3         2         1
15652  *  10987654321098765432109876543210
15653  *  001000               00010001101
15654  *     rt -----
15655  *          rs -----
15656  *               rd -----
15657  */
15658 static char *TLBWI(uint64 instruction, Dis_info *info)
15659 {
15660     (void)instruction;
15661 
15662     return g_strdup("TLBWI ");
15663 }
15664 
15665 
15666 /*
15667  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15668  *
15669  *   3         2         1
15670  *  10987654321098765432109876543210
15671  *  001000               00010001101
15672  *     rt -----
15673  *          rs -----
15674  *               rd -----
15675  */
15676 static char *TLBWR(uint64 instruction, Dis_info *info)
15677 {
15678     (void)instruction;
15679 
15680     return g_strdup("TLBWR ");
15681 }
15682 
15683 
15684 /*
15685  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15686  *
15687  *   3         2         1
15688  *  10987654321098765432109876543210
15689  *  001000               00010001101
15690  *     rt -----
15691  *          rs -----
15692  *               rd -----
15693  */
15694 static char *TNE(uint64 instruction, Dis_info *info)
15695 {
15696     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15697     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15698 
15699     const char *rs = GPR(rs_value, info);
15700     const char *rt = GPR(rt_value, info);
15701 
15702     return img_format("TNE %s, %s", rs, rt);
15703 }
15704 
15705 
15706 /*
15707  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15708  *
15709  *   3         2         1
15710  *  10987654321098765432109876543210
15711  *  001000               00010001101
15712  *     rt -----
15713  *          rs -----
15714  *               rd -----
15715  */
15716 static char *TRUNC_L_D(uint64 instruction, Dis_info *info)
15717 {
15718     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15719     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15720 
15721     const char *ft = FPR(ft_value, info);
15722     const char *fs = FPR(fs_value, info);
15723 
15724     return img_format("TRUNC.L.D %s, %s", ft, fs);
15725 }
15726 
15727 
15728 /*
15729  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15730  *
15731  *   3         2         1
15732  *  10987654321098765432109876543210
15733  *  001000               00010001101
15734  *     rt -----
15735  *          rs -----
15736  *               rd -----
15737  */
15738 static char *TRUNC_L_S(uint64 instruction, Dis_info *info)
15739 {
15740     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15741     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15742 
15743     const char *ft = FPR(ft_value, info);
15744     const char *fs = FPR(fs_value, info);
15745 
15746     return img_format("TRUNC.L.S %s, %s", ft, fs);
15747 }
15748 
15749 
15750 /*
15751  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15752  *
15753  *   3         2         1
15754  *  10987654321098765432109876543210
15755  *  001000               00010001101
15756  *     rt -----
15757  *          rs -----
15758  *               rd -----
15759  */
15760 static char *TRUNC_W_D(uint64 instruction, Dis_info *info)
15761 {
15762     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15763     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15764 
15765     const char *ft = FPR(ft_value, info);
15766     const char *fs = FPR(fs_value, info);
15767 
15768     return img_format("TRUNC.W.D %s, %s", ft, fs);
15769 }
15770 
15771 
15772 /*
15773  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15774  *
15775  *   3         2         1
15776  *  10987654321098765432109876543210
15777  *  001000               00010001101
15778  *     rt -----
15779  *          rs -----
15780  *               rd -----
15781  */
15782 static char *TRUNC_W_S(uint64 instruction, Dis_info *info)
15783 {
15784     uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15785     uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15786 
15787     const char *ft = FPR(ft_value, info);
15788     const char *fs = FPR(fs_value, info);
15789 
15790     return img_format("TRUNC.W.S %s, %s", ft, fs);
15791 }
15792 
15793 
15794 /*
15795  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15796  *
15797  *   3         2         1
15798  *  10987654321098765432109876543210
15799  *  001000               00010001101
15800  *     rt -----
15801  *          rs -----
15802  *               rd -----
15803  */
15804 static char *UALDM(uint64 instruction, Dis_info *info)
15805 {
15806     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15807     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15808     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15809     uint64 count3_value = extract_count3_14_13_12(instruction);
15810 
15811     const char *rt = GPR(rt_value, info);
15812     const char *rs = GPR(rs_value, info);
15813     uint64 count3 = encode_count3_from_count(count3_value);
15814 
15815     return img_format("UALDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15816                       rt, s_value, rs, count3);
15817 }
15818 
15819 
15820 /*
15821  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15822  *
15823  *   3         2         1
15824  *  10987654321098765432109876543210
15825  *  001000               00010001101
15826  *     rt -----
15827  *          rs -----
15828  *               rd -----
15829  */
15830 static char *UALH(uint64 instruction, Dis_info *info)
15831 {
15832     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15833     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15834     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15835 
15836     const char *rt = GPR(rt_value, info);
15837     const char *rs = GPR(rs_value, info);
15838 
15839     return img_format("UALH %s, %" PRId64 "(%s)", rt, s_value, rs);
15840 }
15841 
15842 
15843 /*
15844  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15845  *
15846  *   3         2         1
15847  *  10987654321098765432109876543210
15848  *  001000               00010001101
15849  *     rt -----
15850  *          rs -----
15851  *               rd -----
15852  */
15853 static char *UALWM(uint64 instruction, Dis_info *info)
15854 {
15855     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15856     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15857     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15858     uint64 count3_value = extract_count3_14_13_12(instruction);
15859 
15860     const char *rt = GPR(rt_value, info);
15861     const char *rs = GPR(rs_value, info);
15862     uint64 count3 = encode_count3_from_count(count3_value);
15863 
15864     return img_format("UALWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15865                       rt, s_value, rs, count3);
15866 }
15867 
15868 
15869 /*
15870  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15871  *
15872  *   3         2         1
15873  *  10987654321098765432109876543210
15874  *  001000               00010001101
15875  *     rt -----
15876  *          rs -----
15877  *               rd -----
15878  */
15879 static char *UASDM(uint64 instruction, Dis_info *info)
15880 {
15881     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15882     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15883     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15884     uint64 count3_value = extract_count3_14_13_12(instruction);
15885 
15886     const char *rt = GPR(rt_value, info);
15887     const char *rs = GPR(rs_value, info);
15888     uint64 count3 = encode_count3_from_count(count3_value);
15889 
15890     return img_format("UASDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15891                       rt, s_value, rs, count3);
15892 }
15893 
15894 
15895 /*
15896  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15897  *
15898  *   3         2         1
15899  *  10987654321098765432109876543210
15900  *  001000               00010001101
15901  *     rt -----
15902  *          rs -----
15903  *               rd -----
15904  */
15905 static char *UASH(uint64 instruction, Dis_info *info)
15906 {
15907     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15908     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15909     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15910 
15911     const char *rt = GPR(rt_value, info);
15912     const char *rs = GPR(rs_value, info);
15913 
15914     return img_format("UASH %s, %" PRId64 "(%s)", rt, s_value, rs);
15915 }
15916 
15917 
15918 /*
15919  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15920  *
15921  *   3         2         1
15922  *  10987654321098765432109876543210
15923  *  001000               00010001101
15924  *     rt -----
15925  *          rs -----
15926  *               rd -----
15927  */
15928 static char *UASWM(uint64 instruction, Dis_info *info)
15929 {
15930     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15931     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15932     int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15933     uint64 count3_value = extract_count3_14_13_12(instruction);
15934 
15935     const char *rt = GPR(rt_value, info);
15936     const char *rs = GPR(rs_value, info);
15937     uint64 count3 = encode_count3_from_count(count3_value);
15938 
15939     return img_format("UASWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15940                       rt, s_value, rs, count3);
15941 }
15942 
15943 
15944 /*
15945  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15946  *
15947  *   3         2         1
15948  *  10987654321098765432109876543210
15949  *  001000               00010001101
15950  *     rt -----
15951  *          rs -----
15952  *               rd -----
15953  */
15954 static char *UDI(uint64 instruction, Dis_info *info)
15955 {
15956     uint64 op_value = extract_op_25_to_3(instruction);
15957 
15958 
15959     return img_format("UDI 0x%" PRIx64, op_value);
15960 }
15961 
15962 
15963 /*
15964  * WAIT code - Enter Wait State
15965  *
15966  *   3         2         1
15967  *  10987654321098765432109876543210
15968  *  001000          1100001101111111
15969  *   code ----------
15970  */
15971 static char *WAIT(uint64 instruction, Dis_info *info)
15972 {
15973     uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
15974 
15975 
15976     return img_format("WAIT 0x%" PRIx64, code_value);
15977 }
15978 
15979 
15980 /*
15981  * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
15982  *         register
15983  *
15984  *   3         2         1
15985  *  10987654321098765432109876543210
15986  *  001000            01011001111111
15987  *     rt -----
15988  *        mask -------
15989  */
15990 static char *WRDSP(uint64 instruction, Dis_info *info)
15991 {
15992     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15993     uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
15994 
15995     const char *rt = GPR(rt_value, info);
15996 
15997     return img_format("WRDSP %s, 0x%" PRIx64, rt, mask_value);
15998 }
15999 
16000 
16001 /*
16002  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16003  *
16004  *   3         2         1
16005  *  10987654321098765432109876543210
16006  *  001000               00010001101
16007  *     rt -----
16008  *          rs -----
16009  *               rd -----
16010  */
16011 static char *WRPGPR(uint64 instruction, Dis_info *info)
16012 {
16013     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16014     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16015 
16016     const char *rt = GPR(rt_value, info);
16017     const char *rs = GPR(rs_value, info);
16018 
16019     return img_format("WRPGPR %s, %s", rt, rs);
16020 }
16021 
16022 
16023 /*
16024  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16025  *
16026  *   3         2         1
16027  *  10987654321098765432109876543210
16028  *  001000               00010001101
16029  *     rt -----
16030  *          rs -----
16031  *               rd -----
16032  */
16033 static char *XOR_16_(uint64 instruction, Dis_info *info)
16034 {
16035     uint64 rt3_value = extract_rt3_9_8_7(instruction);
16036     uint64 rs3_value = extract_rs3_6_5_4(instruction);
16037 
16038     const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
16039     const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
16040 
16041     return img_format("XOR %s, %s", rs3, rt3);
16042 }
16043 
16044 
16045 /*
16046  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16047  *
16048  *   3         2         1
16049  *  10987654321098765432109876543210
16050  *  001000               00010001101
16051  *     rt -----
16052  *          rs -----
16053  *               rd -----
16054  */
16055 static char *XOR_32_(uint64 instruction, Dis_info *info)
16056 {
16057     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16058     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16059     uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
16060 
16061     const char *rd = GPR(rd_value, info);
16062     const char *rs = GPR(rs_value, info);
16063     const char *rt = GPR(rt_value, info);
16064 
16065     return img_format("XOR %s, %s, %s", rd, rs, rt);
16066 }
16067 
16068 
16069 /*
16070  * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16071  *
16072  *   3         2         1
16073  *  10987654321098765432109876543210
16074  *  001000               00010001101
16075  *     rt -----
16076  *          rs -----
16077  *               rd -----
16078  */
16079 static char *XORI(uint64 instruction, Dis_info *info)
16080 {
16081     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16082     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16083     uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
16084 
16085     const char *rt = GPR(rt_value, info);
16086     const char *rs = GPR(rs_value, info);
16087 
16088     return img_format("XORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
16089 }
16090 
16091 
16092 /*
16093  * YIELD rt, rs -
16094  *
16095  *   3         2         1
16096  *  10987654321098765432109876543210
16097  *  001000               00010001101
16098  *     rt -----
16099  *          rs -----
16100  */
16101 static char *YIELD(uint64 instruction, Dis_info *info)
16102 {
16103     uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16104     uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16105 
16106     const char *rt = GPR(rt_value, info);
16107     const char *rs = GPR(rs_value, info);
16108 
16109     return img_format("YIELD %s, %s", rt, rs);
16110 }
16111 
16112 
16113 
16114 /*
16115  *                nanoMIPS instruction pool organization
16116  *                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16117  *
16118  *
16119  *                 ┌─ P.ADDIU ─── P.RI ─── P.SYSCALL
16120  *                 │
16121  *                 │                                      ┌─ P.TRAP
16122  *                 │                                      │
16123  *                 │                      ┌─ _POOL32A0_0 ─┼─ P.CMOVE
16124  *                 │                      │               │
16125  *                 │                      │               └─ P.SLTU
16126  *                 │        ┌─ _POOL32A0 ─┤
16127  *                 │        │             │
16128  *                 │        │             │
16129  *                 │        │             └─ _POOL32A0_1 ─── CRC32
16130  *                 │        │
16131  *                 ├─ P32A ─┤
16132  *                 │        │                           ┌─ PP.LSX
16133  *                 │        │             ┌─ P.LSX ─────┤
16134  *                 │        │             │             └─ PP.LSXS
16135  *                 │        └─ _POOL32A7 ─┤
16136  *                 │                      │             ┌─ POOL32Axf_4
16137  *                 │                      └─ POOL32Axf ─┤
16138  *                 │                                    └─ POOL32Axf_5
16139  *                 │
16140  *                 ├─ PBAL
16141  *                 │
16142  *                 ├─ P.GP.W   ┌─ PP.LSX
16143  *         ┌─ P32 ─┤           │
16144  *         │       ├─ P.GP.BH ─┴─ PP.LSXS
16145  *         │       │
16146  *         │       ├─ P.J ─────── PP.BALRSC
16147  *         │       │
16148  *         │       ├─ P48I
16149  *         │       │           ┌─ P.SR
16150  *         │       │           │
16151  *         │       │           ├─ P.SHIFT
16152  *         │       │           │
16153  *         │       ├─ P.U12 ───┼─ P.ROTX
16154  *         │       │           │
16155  *         │       │           ├─ P.INS
16156  *         │       │           │
16157  *         │       │           └─ P.EXT
16158  *         │       │
16159  *         │       ├─ P.LS.U12 ── P.PREF.U12
16160  *         │       │
16161  *         │       ├─ P.BR1 ───── P.BR3A
16162  *         │       │
16163  *         │       │           ┌─ P.LS.S0 ─── P16.SYSCALL
16164  *         │       │           │
16165  *         │       │           │           ┌─ P.LL
16166  *         │       │           ├─ P.LS.S1 ─┤
16167  *         │       │           │           └─ P.SC
16168  *         │       │           │
16169  *         │       │           │           ┌─ P.PREFE
16170  *  MAJOR ─┤       ├─ P.LS.S9 ─┤           │
16171  *         │       │           ├─ P.LS.E0 ─┼─ P.LLE
16172  *         │       │           │           │
16173  *         │       │           │           └─ P.SCE
16174  *         │       │           │
16175  *         │       │           ├─ P.LS.WM
16176  *         │       │           │
16177  *         │       │           └─ P.LS.UAWM
16178  *         │       │
16179  *         │       │
16180  *         │       ├─ P.BR2
16181  *         │       │
16182  *         │       ├─ P.BRI
16183  *         │       │
16184  *         │       └─ P.LUI
16185  *         │
16186  *         │
16187  *         │       ┌─ P16.MV ──── P16.RI ─── P16.SYSCALL
16188  *         │       │
16189  *         │       ├─ P16.SR
16190  *         │       │
16191  *         │       ├─ P16.SHIFT
16192  *         │       │
16193  *         │       ├─ P16.4x4
16194  *         │       │
16195  *         │       ├─ P16C ────── POOL16C_0 ── POOL16C_00
16196  *         │       │
16197  *         └─ P16 ─┼─ P16.LB
16198  *                 │
16199  *                 ├─ P16.A1
16200  *                 │
16201  *                 ├─ P16.LH
16202  *                 │
16203  *                 ├─ P16.A2 ──── P.ADDIU[RS5]
16204  *                 │
16205  *                 ├─ P16.ADDU
16206  *                 │
16207  *                 └─ P16.BR ──┬─ P16.JRC
16208  *                             │
16209  *                             └─ P16.BR1
16210  *
16211  *
16212  *  (FP, DPS, and some minor instruction pools are omitted from the diagram)
16213  *
16214  */
16215 
16216 static const Pool P_SYSCALL[2] = {
16217     { instruction         , 0                   , 0   , 32,
16218        0xfffc0000, 0x00080000, &SYSCALL_32_      , 0,
16219        0x0                 },        /* SYSCALL[32] */
16220     { instruction         , 0                   , 0   , 32,
16221        0xfffc0000, 0x000c0000, &HYPCALL          , 0,
16222        CP0_ | VZ_          },        /* HYPCALL */
16223 };
16224 
16225 
16226 static const Pool P_RI[4] = {
16227     { instruction         , 0                   , 0   , 32,
16228        0xfff80000, 0x00000000, &SIGRIE           , 0,
16229        0x0                 },        /* SIGRIE */
16230     { pool                , P_SYSCALL           , 2   , 32,
16231        0xfff80000, 0x00080000, 0                      , 0,
16232        0x0                 },        /* P.SYSCALL */
16233     { instruction         , 0                   , 0   , 32,
16234        0xfff80000, 0x00100000, &BREAK_32_        , 0,
16235        0x0                 },        /* BREAK[32] */
16236     { instruction         , 0                   , 0   , 32,
16237        0xfff80000, 0x00180000, &SDBBP_32_        , 0,
16238        EJTAG_              },        /* SDBBP[32] */
16239 };
16240 
16241 
16242 static const Pool P_ADDIU[2] = {
16243     { pool                , P_RI                , 4   , 32,
16244        0xffe00000, 0x00000000, 0                      , 0,
16245        0x0                 },        /* P.RI */
16246     { instruction         , 0                   , 0   , 32,
16247        0xfc000000, 0x00000000, &ADDIU_32_        , &ADDIU_32__cond   ,
16248        0x0                 },        /* ADDIU[32] */
16249 };
16250 
16251 
16252 static const Pool P_TRAP[2] = {
16253     { instruction         , 0                   , 0   , 32,
16254        0xfc0007ff, 0x20000000, &TEQ              , 0,
16255        XMMS_               },        /* TEQ */
16256     { instruction         , 0                   , 0   , 32,
16257        0xfc0007ff, 0x20000400, &TNE              , 0,
16258        XMMS_               },        /* TNE */
16259 };
16260 
16261 
16262 static const Pool P_CMOVE[2] = {
16263     { instruction         , 0                   , 0   , 32,
16264        0xfc0007ff, 0x20000210, &MOVZ             , 0,
16265        0x0                 },        /* MOVZ */
16266     { instruction         , 0                   , 0   , 32,
16267        0xfc0007ff, 0x20000610, &MOVN             , 0,
16268        0x0                 },        /* MOVN */
16269 };
16270 
16271 
16272 static const Pool P_D_MT_VPE[2] = {
16273     { instruction         , 0                   , 0   , 32,
16274        0xfc1f3fff, 0x20010ab0, &DMT              , 0,
16275        MT_                 },        /* DMT */
16276     { instruction         , 0                   , 0   , 32,
16277        0xfc1f3fff, 0x20000ab0, &DVPE             , 0,
16278        MT_                 },        /* DVPE */
16279 };
16280 
16281 
16282 static const Pool P_E_MT_VPE[2] = {
16283     { instruction         , 0                   , 0   , 32,
16284        0xfc1f3fff, 0x20010eb0, &EMT              , 0,
16285        MT_                 },        /* EMT */
16286     { instruction         , 0                   , 0   , 32,
16287        0xfc1f3fff, 0x20000eb0, &EVPE             , 0,
16288        MT_                 },        /* EVPE */
16289 };
16290 
16291 
16292 static const Pool _P_MT_VPE[2] = {
16293     { pool                , P_D_MT_VPE          , 2   , 32,
16294        0xfc003fff, 0x20000ab0, 0                      , 0,
16295        0x0                 },        /* P.D_MT_VPE */
16296     { pool                , P_E_MT_VPE          , 2   , 32,
16297        0xfc003fff, 0x20000eb0, 0                      , 0,
16298        0x0                 },        /* P.E_MT_VPE */
16299 };
16300 
16301 
16302 static const Pool P_MT_VPE[8] = {
16303     { reserved_block      , 0                   , 0   , 32,
16304        0xfc003bff, 0x200002b0, 0                      , 0,
16305        0x0                 },        /* P.MT_VPE~*(0) */
16306     { pool                , _P_MT_VPE           , 2   , 32,
16307        0xfc003bff, 0x20000ab0, 0                      , 0,
16308        0x0                 },        /* _P.MT_VPE */
16309     { reserved_block      , 0                   , 0   , 32,
16310        0xfc003bff, 0x200012b0, 0                      , 0,
16311        0x0                 },        /* P.MT_VPE~*(2) */
16312     { reserved_block      , 0                   , 0   , 32,
16313        0xfc003bff, 0x20001ab0, 0                      , 0,
16314        0x0                 },        /* P.MT_VPE~*(3) */
16315     { reserved_block      , 0                   , 0   , 32,
16316        0xfc003bff, 0x200022b0, 0                      , 0,
16317        0x0                 },        /* P.MT_VPE~*(4) */
16318     { reserved_block      , 0                   , 0   , 32,
16319        0xfc003bff, 0x20002ab0, 0                      , 0,
16320        0x0                 },        /* P.MT_VPE~*(5) */
16321     { reserved_block      , 0                   , 0   , 32,
16322        0xfc003bff, 0x200032b0, 0                      , 0,
16323        0x0                 },        /* P.MT_VPE~*(6) */
16324     { reserved_block      , 0                   , 0   , 32,
16325        0xfc003bff, 0x20003ab0, 0                      , 0,
16326        0x0                 },        /* P.MT_VPE~*(7) */
16327 };
16328 
16329 
16330 static const Pool P_DVP[2] = {
16331     { instruction         , 0                   , 0   , 32,
16332        0xfc00ffff, 0x20000390, &DVP              , 0,
16333        0x0                 },        /* DVP */
16334     { instruction         , 0                   , 0   , 32,
16335        0xfc00ffff, 0x20000790, &EVP              , 0,
16336        0x0                 },        /* EVP */
16337 };
16338 
16339 
16340 static const Pool P_SLTU[2] = {
16341     { pool                , P_DVP               , 2   , 32,
16342        0xfc00fbff, 0x20000390, 0                      , 0,
16343        0x0                 },        /* P.DVP */
16344     { instruction         , 0                   , 0   , 32,
16345        0xfc0003ff, 0x20000390, &SLTU             , &SLTU_cond        ,
16346        0x0                 },        /* SLTU */
16347 };
16348 
16349 
16350 static const Pool _POOL32A0[128] = {
16351     { pool                , P_TRAP              , 2   , 32,
16352        0xfc0003ff, 0x20000000, 0                      , 0,
16353        0x0                 },        /* P.TRAP */
16354     { instruction         , 0                   , 0   , 32,
16355        0xfc0003ff, 0x20000008, &SEB              , 0,
16356        XMMS_               },        /* SEB */
16357     { instruction         , 0                   , 0   , 32,
16358        0xfc0003ff, 0x20000010, &SLLV             , 0,
16359        0x0                 },        /* SLLV */
16360     { instruction         , 0                   , 0   , 32,
16361        0xfc0003ff, 0x20000018, &MUL_32_          , 0,
16362        0x0                 },        /* MUL[32] */
16363     { reserved_block      , 0                   , 0   , 32,
16364        0xfc0003ff, 0x20000020, 0                      , 0,
16365        0x0                 },        /* _POOL32A0~*(4) */
16366     { reserved_block      , 0                   , 0   , 32,
16367        0xfc0003ff, 0x20000028, 0                      , 0,
16368        0x0                 },        /* _POOL32A0~*(5) */
16369     { instruction         , 0                   , 0   , 32,
16370        0xfc0003ff, 0x20000030, &MFC0             , 0,
16371        0x0                 },        /* MFC0 */
16372     { instruction         , 0                   , 0   , 32,
16373        0xfc0003ff, 0x20000038, &MFHC0            , 0,
16374        CP0_ | MVH_         },        /* MFHC0 */
16375     { reserved_block      , 0                   , 0   , 32,
16376        0xfc0003ff, 0x20000040, 0                      , 0,
16377        0x0                 },        /* _POOL32A0~*(8) */
16378     { instruction         , 0                   , 0   , 32,
16379        0xfc0003ff, 0x20000048, &SEH              , 0,
16380        0x0                 },        /* SEH */
16381     { instruction         , 0                   , 0   , 32,
16382        0xfc0003ff, 0x20000050, &SRLV             , 0,
16383        0x0                 },        /* SRLV */
16384     { instruction         , 0                   , 0   , 32,
16385        0xfc0003ff, 0x20000058, &MUH              , 0,
16386        0x0                 },        /* MUH */
16387     { reserved_block      , 0                   , 0   , 32,
16388        0xfc0003ff, 0x20000060, 0                      , 0,
16389        0x0                 },        /* _POOL32A0~*(12) */
16390     { reserved_block      , 0                   , 0   , 32,
16391        0xfc0003ff, 0x20000068, 0                      , 0,
16392        0x0                 },        /* _POOL32A0~*(13) */
16393     { instruction         , 0                   , 0   , 32,
16394        0xfc0003ff, 0x20000070, &MTC0             , 0,
16395        CP0_                },        /* MTC0 */
16396     { instruction         , 0                   , 0   , 32,
16397        0xfc0003ff, 0x20000078, &MTHC0            , 0,
16398        CP0_ | MVH_         },        /* MTHC0 */
16399     { reserved_block      , 0                   , 0   , 32,
16400        0xfc0003ff, 0x20000080, 0                      , 0,
16401        0x0                 },        /* _POOL32A0~*(16) */
16402     { reserved_block      , 0                   , 0   , 32,
16403        0xfc0003ff, 0x20000088, 0                      , 0,
16404        0x0                 },        /* _POOL32A0~*(17) */
16405     { instruction         , 0                   , 0   , 32,
16406        0xfc0003ff, 0x20000090, &SRAV             , 0,
16407        0x0                 },        /* SRAV */
16408     { instruction         , 0                   , 0   , 32,
16409        0xfc0003ff, 0x20000098, &MULU             , 0,
16410        0x0                 },        /* MULU */
16411     { reserved_block      , 0                   , 0   , 32,
16412        0xfc0003ff, 0x200000a0, 0                      , 0,
16413        0x0                 },        /* _POOL32A0~*(20) */
16414     { reserved_block      , 0                   , 0   , 32,
16415        0xfc0003ff, 0x200000a8, 0                      , 0,
16416        0x0                 },        /* _POOL32A0~*(21) */
16417     { instruction         , 0                   , 0   , 32,
16418        0xfc0003ff, 0x200000b0, &MFGC0            , 0,
16419        CP0_ | VZ_          },        /* MFGC0 */
16420     { instruction         , 0                   , 0   , 32,
16421        0xfc0003ff, 0x200000b8, &MFHGC0           , 0,
16422        CP0_ | VZ_ | MVH_   },        /* MFHGC0 */
16423     { reserved_block      , 0                   , 0   , 32,
16424        0xfc0003ff, 0x200000c0, 0                      , 0,
16425        0x0                 },        /* _POOL32A0~*(24) */
16426     { reserved_block      , 0                   , 0   , 32,
16427        0xfc0003ff, 0x200000c8, 0                      , 0,
16428        0x0                 },        /* _POOL32A0~*(25) */
16429     { instruction         , 0                   , 0   , 32,
16430        0xfc0003ff, 0x200000d0, &ROTRV            , 0,
16431        0x0                 },        /* ROTRV */
16432     { instruction         , 0                   , 0   , 32,
16433        0xfc0003ff, 0x200000d8, &MUHU             , 0,
16434        0x0                 },        /* MUHU */
16435     { reserved_block      , 0                   , 0   , 32,
16436        0xfc0003ff, 0x200000e0, 0                      , 0,
16437        0x0                 },        /* _POOL32A0~*(28) */
16438     { reserved_block      , 0                   , 0   , 32,
16439        0xfc0003ff, 0x200000e8, 0                      , 0,
16440        0x0                 },        /* _POOL32A0~*(29) */
16441     { instruction         , 0                   , 0   , 32,
16442        0xfc0003ff, 0x200000f0, &MTGC0            , 0,
16443        CP0_ | VZ_          },        /* MTGC0 */
16444     { instruction         , 0                   , 0   , 32,
16445        0xfc0003ff, 0x200000f8, &MTHGC0           , 0,
16446        CP0_ | VZ_ | MVH_   },        /* MTHGC0 */
16447     { reserved_block      , 0                   , 0   , 32,
16448        0xfc0003ff, 0x20000100, 0                      , 0,
16449        0x0                 },        /* _POOL32A0~*(32) */
16450     { reserved_block      , 0                   , 0   , 32,
16451        0xfc0003ff, 0x20000108, 0                      , 0,
16452        0x0                 },        /* _POOL32A0~*(33) */
16453     { instruction         , 0                   , 0   , 32,
16454        0xfc0003ff, 0x20000110, &ADD              , 0,
16455        XMMS_               },        /* ADD */
16456     { instruction         , 0                   , 0   , 32,
16457        0xfc0003ff, 0x20000118, &DIV              , 0,
16458        0x0                 },        /* DIV */
16459     { reserved_block      , 0                   , 0   , 32,
16460        0xfc0003ff, 0x20000120, 0                      , 0,
16461        0x0                 },        /* _POOL32A0~*(36) */
16462     { reserved_block      , 0                   , 0   , 32,
16463        0xfc0003ff, 0x20000128, 0                      , 0,
16464        0x0                 },        /* _POOL32A0~*(37) */
16465     { instruction         , 0                   , 0   , 32,
16466        0xfc0003ff, 0x20000130, &DMFC0            , 0,
16467        CP0_ | MIPS64_      },        /* DMFC0 */
16468     { reserved_block      , 0                   , 0   , 32,
16469        0xfc0003ff, 0x20000138, 0                      , 0,
16470        0x0                 },        /* _POOL32A0~*(39) */
16471     { reserved_block      , 0                   , 0   , 32,
16472        0xfc0003ff, 0x20000140, 0                      , 0,
16473        0x0                 },        /* _POOL32A0~*(40) */
16474     { reserved_block      , 0                   , 0   , 32,
16475        0xfc0003ff, 0x20000148, 0                      , 0,
16476        0x0                 },        /* _POOL32A0~*(41) */
16477     { instruction         , 0                   , 0   , 32,
16478        0xfc0003ff, 0x20000150, &ADDU_32_         , 0,
16479        0x0                 },        /* ADDU[32] */
16480     { instruction         , 0                   , 0   , 32,
16481        0xfc0003ff, 0x20000158, &MOD              , 0,
16482        0x0                 },        /* MOD */
16483     { reserved_block      , 0                   , 0   , 32,
16484        0xfc0003ff, 0x20000160, 0                      , 0,
16485        0x0                 },        /* _POOL32A0~*(44) */
16486     { reserved_block      , 0                   , 0   , 32,
16487        0xfc0003ff, 0x20000168, 0                      , 0,
16488        0x0                 },        /* _POOL32A0~*(45) */
16489     { instruction         , 0                   , 0   , 32,
16490        0xfc0003ff, 0x20000170, &DMTC0            , 0,
16491        CP0_ | MIPS64_      },        /* DMTC0 */
16492     { reserved_block      , 0                   , 0   , 32,
16493        0xfc0003ff, 0x20000178, 0                      , 0,
16494        0x0                 },        /* _POOL32A0~*(47) */
16495     { reserved_block      , 0                   , 0   , 32,
16496        0xfc0003ff, 0x20000180, 0                      , 0,
16497        0x0                 },        /* _POOL32A0~*(48) */
16498     { reserved_block      , 0                   , 0   , 32,
16499        0xfc0003ff, 0x20000188, 0                      , 0,
16500        0x0                 },        /* _POOL32A0~*(49) */
16501     { instruction         , 0                   , 0   , 32,
16502        0xfc0003ff, 0x20000190, &SUB              , 0,
16503        XMMS_               },        /* SUB */
16504     { instruction         , 0                   , 0   , 32,
16505        0xfc0003ff, 0x20000198, &DIVU             , 0,
16506        0x0                 },        /* DIVU */
16507     { reserved_block      , 0                   , 0   , 32,
16508        0xfc0003ff, 0x200001a0, 0                      , 0,
16509        0x0                 },        /* _POOL32A0~*(52) */
16510     { reserved_block      , 0                   , 0   , 32,
16511        0xfc0003ff, 0x200001a8, 0                      , 0,
16512        0x0                 },        /* _POOL32A0~*(53) */
16513     { instruction         , 0                   , 0   , 32,
16514        0xfc0003ff, 0x200001b0, &DMFGC0           , 0,
16515        CP0_ | MIPS64_ | VZ_},        /* DMFGC0 */
16516     { reserved_block      , 0                   , 0   , 32,
16517        0xfc0003ff, 0x200001b8, 0                      , 0,
16518        0x0                 },        /* _POOL32A0~*(55) */
16519     { instruction         , 0                   , 0   , 32,
16520        0xfc0003ff, 0x200001c0, &RDHWR            , 0,
16521        XMMS_               },        /* RDHWR */
16522     { reserved_block      , 0                   , 0   , 32,
16523        0xfc0003ff, 0x200001c8, 0                      , 0,
16524        0x0                 },        /* _POOL32A0~*(57) */
16525     { instruction         , 0                   , 0   , 32,
16526        0xfc0003ff, 0x200001d0, &SUBU_32_         , 0,
16527        0x0                 },        /* SUBU[32] */
16528     { instruction         , 0                   , 0   , 32,
16529        0xfc0003ff, 0x200001d8, &MODU             , 0,
16530        0x0                 },        /* MODU */
16531     { reserved_block      , 0                   , 0   , 32,
16532        0xfc0003ff, 0x200001e0, 0                      , 0,
16533        0x0                 },        /* _POOL32A0~*(60) */
16534     { reserved_block      , 0                   , 0   , 32,
16535        0xfc0003ff, 0x200001e8, 0                      , 0,
16536        0x0                 },        /* _POOL32A0~*(61) */
16537     { instruction         , 0                   , 0   , 32,
16538        0xfc0003ff, 0x200001f0, &DMTGC0           , 0,
16539        CP0_ | MIPS64_ | VZ_},        /* DMTGC0 */
16540     { reserved_block      , 0                   , 0   , 32,
16541        0xfc0003ff, 0x200001f8, 0                      , 0,
16542        0x0                 },        /* _POOL32A0~*(63) */
16543     { reserved_block      , 0                   , 0   , 32,
16544        0xfc0003ff, 0x20000200, 0                      , 0,
16545        0x0                 },        /* _POOL32A0~*(64) */
16546     { reserved_block      , 0                   , 0   , 32,
16547        0xfc0003ff, 0x20000208, 0                      , 0,
16548        0x0                 },        /* _POOL32A0~*(65) */
16549     { pool                , P_CMOVE             , 2   , 32,
16550        0xfc0003ff, 0x20000210, 0                      , 0,
16551        0x0                 },        /* P.CMOVE */
16552     { reserved_block      , 0                   , 0   , 32,
16553        0xfc0003ff, 0x20000218, 0                      , 0,
16554        0x0                 },        /* _POOL32A0~*(67) */
16555     { reserved_block      , 0                   , 0   , 32,
16556        0xfc0003ff, 0x20000220, 0                      , 0,
16557        0x0                 },        /* _POOL32A0~*(68) */
16558     { instruction         , 0                   , 0   , 32,
16559        0xfc0003ff, 0x20000228, &FORK             , 0,
16560        MT_                 },        /* FORK */
16561     { instruction         , 0                   , 0   , 32,
16562        0xfc0003ff, 0x20000230, &MFTR             , 0,
16563        MT_                 },        /* MFTR */
16564     { instruction         , 0                   , 0   , 32,
16565        0xfc0003ff, 0x20000238, &MFHTR            , 0,
16566        MT_                 },        /* MFHTR */
16567     { reserved_block      , 0                   , 0   , 32,
16568        0xfc0003ff, 0x20000240, 0                      , 0,
16569        0x0                 },        /* _POOL32A0~*(72) */
16570     { reserved_block      , 0                   , 0   , 32,
16571        0xfc0003ff, 0x20000248, 0                      , 0,
16572        0x0                 },        /* _POOL32A0~*(73) */
16573     { instruction         , 0                   , 0   , 32,
16574        0xfc0003ff, 0x20000250, &AND_32_          , 0,
16575        0x0                 },        /* AND[32] */
16576     { reserved_block      , 0                   , 0   , 32,
16577        0xfc0003ff, 0x20000258, 0                      , 0,
16578        0x0                 },        /* _POOL32A0~*(75) */
16579     { reserved_block      , 0                   , 0   , 32,
16580        0xfc0003ff, 0x20000260, 0                      , 0,
16581        0x0                 },        /* _POOL32A0~*(76) */
16582     { instruction         , 0                   , 0   , 32,
16583        0xfc0003ff, 0x20000268, &YIELD            , 0,
16584        MT_                 },        /* YIELD */
16585     { instruction         , 0                   , 0   , 32,
16586        0xfc0003ff, 0x20000270, &MTTR             , 0,
16587        MT_                 },        /* MTTR */
16588     { instruction         , 0                   , 0   , 32,
16589        0xfc0003ff, 0x20000278, &MTHTR            , 0,
16590        MT_                 },        /* MTHTR */
16591     { reserved_block      , 0                   , 0   , 32,
16592        0xfc0003ff, 0x20000280, 0                      , 0,
16593        0x0                 },        /* _POOL32A0~*(80) */
16594     { reserved_block      , 0                   , 0   , 32,
16595        0xfc0003ff, 0x20000288, 0                      , 0,
16596        0x0                 },        /* _POOL32A0~*(81) */
16597     { instruction         , 0                   , 0   , 32,
16598        0xfc0003ff, 0x20000290, &OR_32_           , 0,
16599        0x0                 },        /* OR[32] */
16600     { reserved_block      , 0                   , 0   , 32,
16601        0xfc0003ff, 0x20000298, 0                      , 0,
16602        0x0                 },        /* _POOL32A0~*(83) */
16603     { reserved_block      , 0                   , 0   , 32,
16604        0xfc0003ff, 0x200002a0, 0                      , 0,
16605        0x0                 },        /* _POOL32A0~*(84) */
16606     { reserved_block      , 0                   , 0   , 32,
16607        0xfc0003ff, 0x200002a8, 0                      , 0,
16608        0x0                 },        /* _POOL32A0~*(85) */
16609     { pool                , P_MT_VPE            , 8   , 32,
16610        0xfc0003ff, 0x200002b0, 0                      , 0,
16611        0x0                 },        /* P.MT_VPE */
16612     { reserved_block      , 0                   , 0   , 32,
16613        0xfc0003ff, 0x200002b8, 0                      , 0,
16614        0x0                 },        /* _POOL32A0~*(87) */
16615     { reserved_block      , 0                   , 0   , 32,
16616        0xfc0003ff, 0x200002c0, 0                      , 0,
16617        0x0                 },        /* _POOL32A0~*(88) */
16618     { reserved_block      , 0                   , 0   , 32,
16619        0xfc0003ff, 0x200002c8, 0                      , 0,
16620        0x0                 },        /* _POOL32A0~*(89) */
16621     { instruction         , 0                   , 0   , 32,
16622        0xfc0003ff, 0x200002d0, &NOR              , 0,
16623        0x0                 },        /* NOR */
16624     { reserved_block      , 0                   , 0   , 32,
16625        0xfc0003ff, 0x200002d8, 0                      , 0,
16626        0x0                 },        /* _POOL32A0~*(91) */
16627     { reserved_block      , 0                   , 0   , 32,
16628        0xfc0003ff, 0x200002e0, 0                      , 0,
16629        0x0                 },        /* _POOL32A0~*(92) */
16630     { reserved_block      , 0                   , 0   , 32,
16631        0xfc0003ff, 0x200002e8, 0                      , 0,
16632        0x0                 },        /* _POOL32A0~*(93) */
16633     { reserved_block      , 0                   , 0   , 32,
16634        0xfc0003ff, 0x200002f0, 0                      , 0,
16635        0x0                 },        /* _POOL32A0~*(94) */
16636     { reserved_block      , 0                   , 0   , 32,
16637        0xfc0003ff, 0x200002f8, 0                      , 0,
16638        0x0                 },        /* _POOL32A0~*(95) */
16639     { reserved_block      , 0                   , 0   , 32,
16640        0xfc0003ff, 0x20000300, 0                      , 0,
16641        0x0                 },        /* _POOL32A0~*(96) */
16642     { reserved_block      , 0                   , 0   , 32,
16643        0xfc0003ff, 0x20000308, 0                      , 0,
16644        0x0                 },        /* _POOL32A0~*(97) */
16645     { instruction         , 0                   , 0   , 32,
16646        0xfc0003ff, 0x20000310, &XOR_32_          , 0,
16647        0x0                 },        /* XOR[32] */
16648     { reserved_block      , 0                   , 0   , 32,
16649        0xfc0003ff, 0x20000318, 0                      , 0,
16650        0x0                 },        /* _POOL32A0~*(99) */
16651     { reserved_block      , 0                   , 0   , 32,
16652        0xfc0003ff, 0x20000320, 0                      , 0,
16653        0x0                 },        /* _POOL32A0~*(100) */
16654     { reserved_block      , 0                   , 0   , 32,
16655        0xfc0003ff, 0x20000328, 0                      , 0,
16656        0x0                 },        /* _POOL32A0~*(101) */
16657     { reserved_block      , 0                   , 0   , 32,
16658        0xfc0003ff, 0x20000330, 0                      , 0,
16659        0x0                 },        /* _POOL32A0~*(102) */
16660     { reserved_block      , 0                   , 0   , 32,
16661        0xfc0003ff, 0x20000338, 0                      , 0,
16662        0x0                 },        /* _POOL32A0~*(103) */
16663     { reserved_block      , 0                   , 0   , 32,
16664        0xfc0003ff, 0x20000340, 0                      , 0,
16665        0x0                 },        /* _POOL32A0~*(104) */
16666     { reserved_block      , 0                   , 0   , 32,
16667        0xfc0003ff, 0x20000348, 0                      , 0,
16668        0x0                 },        /* _POOL32A0~*(105) */
16669     { instruction         , 0                   , 0   , 32,
16670        0xfc0003ff, 0x20000350, &SLT              , 0,
16671        0x0                 },        /* SLT */
16672     { reserved_block      , 0                   , 0   , 32,
16673        0xfc0003ff, 0x20000358, 0                      , 0,
16674        0x0                 },        /* _POOL32A0~*(107) */
16675     { reserved_block      , 0                   , 0   , 32,
16676        0xfc0003ff, 0x20000360, 0                      , 0,
16677        0x0                 },        /* _POOL32A0~*(108) */
16678     { reserved_block      , 0                   , 0   , 32,
16679        0xfc0003ff, 0x20000368, 0                      , 0,
16680        0x0                 },        /* _POOL32A0~*(109) */
16681     { reserved_block      , 0                   , 0   , 32,
16682        0xfc0003ff, 0x20000370, 0                      , 0,
16683        0x0                 },        /* _POOL32A0~*(110) */
16684     { reserved_block      , 0                   , 0   , 32,
16685        0xfc0003ff, 0x20000378, 0                      , 0,
16686        0x0                 },        /* _POOL32A0~*(111) */
16687     { reserved_block      , 0                   , 0   , 32,
16688        0xfc0003ff, 0x20000380, 0                      , 0,
16689        0x0                 },        /* _POOL32A0~*(112) */
16690     { reserved_block      , 0                   , 0   , 32,
16691        0xfc0003ff, 0x20000388, 0                      , 0,
16692        0x0                 },        /* _POOL32A0~*(113) */
16693     { pool                , P_SLTU              , 2   , 32,
16694        0xfc0003ff, 0x20000390, 0                      , 0,
16695        0x0                 },        /* P.SLTU */
16696     { reserved_block      , 0                   , 0   , 32,
16697        0xfc0003ff, 0x20000398, 0                      , 0,
16698        0x0                 },        /* _POOL32A0~*(115) */
16699     { reserved_block      , 0                   , 0   , 32,
16700        0xfc0003ff, 0x200003a0, 0                      , 0,
16701        0x0                 },        /* _POOL32A0~*(116) */
16702     { reserved_block      , 0                   , 0   , 32,
16703        0xfc0003ff, 0x200003a8, 0                      , 0,
16704        0x0                 },        /* _POOL32A0~*(117) */
16705     { reserved_block      , 0                   , 0   , 32,
16706        0xfc0003ff, 0x200003b0, 0                      , 0,
16707        0x0                 },        /* _POOL32A0~*(118) */
16708     { reserved_block      , 0                   , 0   , 32,
16709        0xfc0003ff, 0x200003b8, 0                      , 0,
16710        0x0                 },        /* _POOL32A0~*(119) */
16711     { reserved_block      , 0                   , 0   , 32,
16712        0xfc0003ff, 0x200003c0, 0                      , 0,
16713        0x0                 },        /* _POOL32A0~*(120) */
16714     { reserved_block      , 0                   , 0   , 32,
16715        0xfc0003ff, 0x200003c8, 0                      , 0,
16716        0x0                 },        /* _POOL32A0~*(121) */
16717     { instruction         , 0                   , 0   , 32,
16718        0xfc0003ff, 0x200003d0, &SOV              , 0,
16719        0x0                 },        /* SOV */
16720     { reserved_block      , 0                   , 0   , 32,
16721        0xfc0003ff, 0x200003d8, 0                      , 0,
16722        0x0                 },        /* _POOL32A0~*(123) */
16723     { reserved_block      , 0                   , 0   , 32,
16724        0xfc0003ff, 0x200003e0, 0                      , 0,
16725        0x0                 },        /* _POOL32A0~*(124) */
16726     { reserved_block      , 0                   , 0   , 32,
16727        0xfc0003ff, 0x200003e8, 0                      , 0,
16728        0x0                 },        /* _POOL32A0~*(125) */
16729     { reserved_block      , 0                   , 0   , 32,
16730        0xfc0003ff, 0x200003f0, 0                      , 0,
16731        0x0                 },        /* _POOL32A0~*(126) */
16732     { reserved_block      , 0                   , 0   , 32,
16733        0xfc0003ff, 0x200003f8, 0                      , 0,
16734        0x0                 },        /* _POOL32A0~*(127) */
16735 };
16736 
16737 
16738 static const Pool ADDQ__S__PH[2] = {
16739     { instruction         , 0                   , 0   , 32,
16740        0xfc0007ff, 0x2000000d, &ADDQ_PH          , 0,
16741        DSP_                },        /* ADDQ.PH */
16742     { instruction         , 0                   , 0   , 32,
16743        0xfc0007ff, 0x2000040d, &ADDQ_S_PH        , 0,
16744        DSP_                },        /* ADDQ_S.PH */
16745 };
16746 
16747 
16748 static const Pool MUL__S__PH[2] = {
16749     { instruction         , 0                   , 0   , 32,
16750        0xfc0007ff, 0x2000002d, &MUL_PH           , 0,
16751        DSP_                },        /* MUL.PH */
16752     { instruction         , 0                   , 0   , 32,
16753        0xfc0007ff, 0x2000042d, &MUL_S_PH         , 0,
16754        DSP_                },        /* MUL_S.PH */
16755 };
16756 
16757 
16758 static const Pool ADDQH__R__PH[2] = {
16759     { instruction         , 0                   , 0   , 32,
16760        0xfc0007ff, 0x2000004d, &ADDQH_PH         , 0,
16761        DSP_                },        /* ADDQH.PH */
16762     { instruction         , 0                   , 0   , 32,
16763        0xfc0007ff, 0x2000044d, &ADDQH_R_PH       , 0,
16764        DSP_                },        /* ADDQH_R.PH */
16765 };
16766 
16767 
16768 static const Pool ADDQH__R__W[2] = {
16769     { instruction         , 0                   , 0   , 32,
16770        0xfc0007ff, 0x2000008d, &ADDQH_W          , 0,
16771        DSP_                },        /* ADDQH.W */
16772     { instruction         , 0                   , 0   , 32,
16773        0xfc0007ff, 0x2000048d, &ADDQH_R_W        , 0,
16774        DSP_                },        /* ADDQH_R.W */
16775 };
16776 
16777 
16778 static const Pool ADDU__S__QB[2] = {
16779     { instruction         , 0                   , 0   , 32,
16780        0xfc0007ff, 0x200000cd, &ADDU_QB          , 0,
16781        DSP_                },        /* ADDU.QB */
16782     { instruction         , 0                   , 0   , 32,
16783        0xfc0007ff, 0x200004cd, &ADDU_S_QB        , 0,
16784        DSP_                },        /* ADDU_S.QB */
16785 };
16786 
16787 
16788 static const Pool ADDU__S__PH[2] = {
16789     { instruction         , 0                   , 0   , 32,
16790        0xfc0007ff, 0x2000010d, &ADDU_PH          , 0,
16791        DSP_                },        /* ADDU.PH */
16792     { instruction         , 0                   , 0   , 32,
16793        0xfc0007ff, 0x2000050d, &ADDU_S_PH        , 0,
16794        DSP_                },        /* ADDU_S.PH */
16795 };
16796 
16797 
16798 static const Pool ADDUH__R__QB[2] = {
16799     { instruction         , 0                   , 0   , 32,
16800        0xfc0007ff, 0x2000014d, &ADDUH_QB         , 0,
16801        DSP_                },        /* ADDUH.QB */
16802     { instruction         , 0                   , 0   , 32,
16803        0xfc0007ff, 0x2000054d, &ADDUH_R_QB       , 0,
16804        DSP_                },        /* ADDUH_R.QB */
16805 };
16806 
16807 
16808 static const Pool SHRAV__R__PH[2] = {
16809     { instruction         , 0                   , 0   , 32,
16810        0xfc0007ff, 0x2000018d, &SHRAV_PH         , 0,
16811        DSP_                },        /* SHRAV.PH */
16812     { instruction         , 0                   , 0   , 32,
16813        0xfc0007ff, 0x2000058d, &SHRAV_R_PH       , 0,
16814        DSP_                },        /* SHRAV_R.PH */
16815 };
16816 
16817 
16818 static const Pool SHRAV__R__QB[2] = {
16819     { instruction         , 0                   , 0   , 32,
16820        0xfc0007ff, 0x200001cd, &SHRAV_QB         , 0,
16821        DSP_                },        /* SHRAV.QB */
16822     { instruction         , 0                   , 0   , 32,
16823        0xfc0007ff, 0x200005cd, &SHRAV_R_QB       , 0,
16824        DSP_                },        /* SHRAV_R.QB */
16825 };
16826 
16827 
16828 static const Pool SUBQ__S__PH[2] = {
16829     { instruction         , 0                   , 0   , 32,
16830        0xfc0007ff, 0x2000020d, &SUBQ_PH          , 0,
16831        DSP_                },        /* SUBQ.PH */
16832     { instruction         , 0                   , 0   , 32,
16833        0xfc0007ff, 0x2000060d, &SUBQ_S_PH        , 0,
16834        DSP_                },        /* SUBQ_S.PH */
16835 };
16836 
16837 
16838 static const Pool SUBQH__R__PH[2] = {
16839     { instruction         , 0                   , 0   , 32,
16840        0xfc0007ff, 0x2000024d, &SUBQH_PH         , 0,
16841        DSP_                },        /* SUBQH.PH */
16842     { instruction         , 0                   , 0   , 32,
16843        0xfc0007ff, 0x2000064d, &SUBQH_R_PH       , 0,
16844        DSP_                },        /* SUBQH_R.PH */
16845 };
16846 
16847 
16848 static const Pool SUBQH__R__W[2] = {
16849     { instruction         , 0                   , 0   , 32,
16850        0xfc0007ff, 0x2000028d, &SUBQH_W          , 0,
16851        DSP_                },        /* SUBQH.W */
16852     { instruction         , 0                   , 0   , 32,
16853        0xfc0007ff, 0x2000068d, &SUBQH_R_W        , 0,
16854        DSP_                },        /* SUBQH_R.W */
16855 };
16856 
16857 
16858 static const Pool SUBU__S__QB[2] = {
16859     { instruction         , 0                   , 0   , 32,
16860        0xfc0007ff, 0x200002cd, &SUBU_QB          , 0,
16861        DSP_                },        /* SUBU.QB */
16862     { instruction         , 0                   , 0   , 32,
16863        0xfc0007ff, 0x200006cd, &SUBU_S_QB        , 0,
16864        DSP_                },        /* SUBU_S.QB */
16865 };
16866 
16867 
16868 static const Pool SUBU__S__PH[2] = {
16869     { instruction         , 0                   , 0   , 32,
16870        0xfc0007ff, 0x2000030d, &SUBU_PH          , 0,
16871        DSP_                },        /* SUBU.PH */
16872     { instruction         , 0                   , 0   , 32,
16873        0xfc0007ff, 0x2000070d, &SUBU_S_PH        , 0,
16874        DSP_                },        /* SUBU_S.PH */
16875 };
16876 
16877 
16878 static const Pool SHRA__R__PH[2] = {
16879     { instruction         , 0                   , 0   , 32,
16880        0xfc0007ff, 0x20000335, &SHRA_PH          , 0,
16881        DSP_                },        /* SHRA.PH */
16882     { instruction         , 0                   , 0   , 32,
16883        0xfc0007ff, 0x20000735, &SHRA_R_PH        , 0,
16884        DSP_                },        /* SHRA_R.PH */
16885 };
16886 
16887 
16888 static const Pool SUBUH__R__QB[2] = {
16889     { instruction         , 0                   , 0   , 32,
16890        0xfc0007ff, 0x2000034d, &SUBUH_QB         , 0,
16891        DSP_                },        /* SUBUH.QB */
16892     { instruction         , 0                   , 0   , 32,
16893        0xfc0007ff, 0x2000074d, &SUBUH_R_QB       , 0,
16894        DSP_                },        /* SUBUH_R.QB */
16895 };
16896 
16897 
16898 static const Pool SHLLV__S__PH[2] = {
16899     { instruction         , 0                   , 0   , 32,
16900        0xfc0007ff, 0x2000038d, &SHLLV_PH         , 0,
16901        DSP_                },        /* SHLLV.PH */
16902     { instruction         , 0                   , 0   , 32,
16903        0xfc0007ff, 0x2000078d, &SHLLV_S_PH       , 0,
16904        DSP_                },        /* SHLLV_S.PH */
16905 };
16906 
16907 
16908 static const Pool SHLL__S__PH[4] = {
16909     { instruction         , 0                   , 0   , 32,
16910        0xfc000fff, 0x200003b5, &SHLL_PH          , 0,
16911        DSP_                },        /* SHLL.PH */
16912     { reserved_block      , 0                   , 0   , 32,
16913        0xfc000fff, 0x200007b5, 0                      , 0,
16914        0x0                 },        /* SHLL[_S].PH~*(1) */
16915     { instruction         , 0                   , 0   , 32,
16916        0xfc000fff, 0x20000bb5, &SHLL_S_PH        , 0,
16917        DSP_                },        /* SHLL_S.PH */
16918     { reserved_block      , 0                   , 0   , 32,
16919        0xfc000fff, 0x20000fb5, 0                      , 0,
16920        0x0                 },        /* SHLL[_S].PH~*(3) */
16921 };
16922 
16923 
16924 static const Pool PRECR_SRA__R__PH_W[2] = {
16925     { instruction         , 0                   , 0   , 32,
16926        0xfc0007ff, 0x200003cd, &PRECR_SRA_PH_W   , 0,
16927        DSP_                },        /* PRECR_SRA.PH.W */
16928     { instruction         , 0                   , 0   , 32,
16929        0xfc0007ff, 0x200007cd, &PRECR_SRA_R_PH_W , 0,
16930        DSP_                },        /* PRECR_SRA_R.PH.W */
16931 };
16932 
16933 
16934 static const Pool _POOL32A5[128] = {
16935     { instruction         , 0                   , 0   , 32,
16936        0xfc0003ff, 0x20000005, &CMP_EQ_PH        , 0,
16937        DSP_                },        /* CMP.EQ.PH */
16938     { pool                , ADDQ__S__PH         , 2   , 32,
16939        0xfc0003ff, 0x2000000d, 0                      , 0,
16940        0x0                 },        /* ADDQ[_S].PH */
16941     { reserved_block      , 0                   , 0   , 32,
16942        0xfc0003ff, 0x20000015, 0                      , 0,
16943        0x0                 },        /* _POOL32A5~*(2) */
16944     { instruction         , 0                   , 0   , 32,
16945        0xfc0003ff, 0x2000001d, &SHILO            , 0,
16946        DSP_                },        /* SHILO */
16947     { instruction         , 0                   , 0   , 32,
16948        0xfc0003ff, 0x20000025, &MULEQ_S_W_PHL    , 0,
16949        DSP_                },        /* MULEQ_S.W.PHL */
16950     { pool                , MUL__S__PH          , 2   , 32,
16951        0xfc0003ff, 0x2000002d, 0                      , 0,
16952        0x0                 },        /* MUL[_S].PH */
16953     { reserved_block      , 0                   , 0   , 32,
16954        0xfc0003ff, 0x20000035, 0                      , 0,
16955        0x0                 },        /* _POOL32A5~*(6) */
16956     { instruction         , 0                   , 0   , 32,
16957        0xfc0003ff, 0x2000003d, &REPL_PH          , 0,
16958        DSP_                },        /* REPL.PH */
16959     { instruction         , 0                   , 0   , 32,
16960        0xfc0003ff, 0x20000045, &CMP_LT_PH        , 0,
16961        DSP_                },        /* CMP.LT.PH */
16962     { pool                , ADDQH__R__PH        , 2   , 32,
16963        0xfc0003ff, 0x2000004d, 0                      , 0,
16964        0x0                 },        /* ADDQH[_R].PH */
16965     { reserved_block      , 0                   , 0   , 32,
16966        0xfc0003ff, 0x20000055, 0                      , 0,
16967        0x0                 },        /* _POOL32A5~*(10) */
16968     { reserved_block      , 0                   , 0   , 32,
16969        0xfc0003ff, 0x2000005d, 0                      , 0,
16970        0x0                 },        /* _POOL32A5~*(11) */
16971     { instruction         , 0                   , 0   , 32,
16972        0xfc0003ff, 0x20000065, &MULEQ_S_W_PHR    , 0,
16973        DSP_                },        /* MULEQ_S.W.PHR */
16974     { instruction         , 0                   , 0   , 32,
16975        0xfc0003ff, 0x2000006d, &PRECR_QB_PH      , 0,
16976        DSP_                },        /* PRECR.QB.PH */
16977     { reserved_block      , 0                   , 0   , 32,
16978        0xfc0003ff, 0x20000075, 0                      , 0,
16979        0x0                 },        /* _POOL32A5~*(14) */
16980     { reserved_block      , 0                   , 0   , 32,
16981        0xfc0003ff, 0x2000007d, 0                      , 0,
16982        0x0                 },        /* _POOL32A5~*(15) */
16983     { instruction         , 0                   , 0   , 32,
16984        0xfc0003ff, 0x20000085, &CMP_LE_PH        , 0,
16985        DSP_                },        /* CMP.LE.PH */
16986     { pool                , ADDQH__R__W         , 2   , 32,
16987        0xfc0003ff, 0x2000008d, 0                      , 0,
16988        0x0                 },        /* ADDQH[_R].W */
16989     { instruction         , 0                   , 0   , 32,
16990        0xfc0003ff, 0x20000095, &MULEU_S_PH_QBL   , 0,
16991        DSP_                },        /* MULEU_S.PH.QBL */
16992     { reserved_block      , 0                   , 0   , 32,
16993        0xfc0003ff, 0x2000009d, 0                      , 0,
16994        0x0                 },        /* _POOL32A5~*(19) */
16995     { reserved_block      , 0                   , 0   , 32,
16996        0xfc0003ff, 0x200000a5, 0                      , 0,
16997        0x0                 },        /* _POOL32A5~*(20) */
16998     { instruction         , 0                   , 0   , 32,
16999        0xfc0003ff, 0x200000ad, &PRECRQ_QB_PH     , 0,
17000        DSP_                },        /* PRECRQ.QB.PH */
17001     { reserved_block      , 0                   , 0   , 32,
17002        0xfc0003ff, 0x200000b5, 0                      , 0,
17003        0x0                 },        /* _POOL32A5~*(22) */
17004     { reserved_block      , 0                   , 0   , 32,
17005        0xfc0003ff, 0x200000bd, 0                      , 0,
17006        0x0                 },        /* _POOL32A5~*(23) */
17007     { instruction         , 0                   , 0   , 32,
17008        0xfc0003ff, 0x200000c5, &CMPGU_EQ_QB      , 0,
17009        DSP_                },        /* CMPGU.EQ.QB */
17010     { pool                , ADDU__S__QB         , 2   , 32,
17011        0xfc0003ff, 0x200000cd, 0                      , 0,
17012        0x0                 },        /* ADDU[_S].QB */
17013     { instruction         , 0                   , 0   , 32,
17014        0xfc0003ff, 0x200000d5, &MULEU_S_PH_QBR   , 0,
17015        DSP_                },        /* MULEU_S.PH.QBR */
17016     { reserved_block      , 0                   , 0   , 32,
17017        0xfc0003ff, 0x200000dd, 0                      , 0,
17018        0x0                 },        /* _POOL32A5~*(27) */
17019     { reserved_block      , 0                   , 0   , 32,
17020        0xfc0003ff, 0x200000e5, 0                      , 0,
17021        0x0                 },        /* _POOL32A5~*(28) */
17022     { instruction         , 0                   , 0   , 32,
17023        0xfc0003ff, 0x200000ed, &PRECRQ_PH_W      , 0,
17024        DSP_                },        /* PRECRQ.PH.W */
17025     { reserved_block      , 0                   , 0   , 32,
17026        0xfc0003ff, 0x200000f5, 0                      , 0,
17027        0x0                 },        /* _POOL32A5~*(30) */
17028     { reserved_block      , 0                   , 0   , 32,
17029        0xfc0003ff, 0x200000fd, 0                      , 0,
17030        0x0                 },        /* _POOL32A5~*(31) */
17031     { instruction         , 0                   , 0   , 32,
17032        0xfc0003ff, 0x20000105, &CMPGU_LT_QB      , 0,
17033        DSP_                },        /* CMPGU.LT.QB */
17034     { pool                , ADDU__S__PH         , 2   , 32,
17035        0xfc0003ff, 0x2000010d, 0                      , 0,
17036        0x0                 },        /* ADDU[_S].PH */
17037     { instruction         , 0                   , 0   , 32,
17038        0xfc0003ff, 0x20000115, &MULQ_RS_PH       , 0,
17039        DSP_                },        /* MULQ_RS.PH */
17040     { reserved_block      , 0                   , 0   , 32,
17041        0xfc0003ff, 0x2000011d, 0                      , 0,
17042        0x0                 },        /* _POOL32A5~*(35) */
17043     { reserved_block      , 0                   , 0   , 32,
17044        0xfc0003ff, 0x20000125, 0                      , 0,
17045        0x0                 },        /* _POOL32A5~*(36) */
17046     { instruction         , 0                   , 0   , 32,
17047        0xfc0003ff, 0x2000012d, &PRECRQ_RS_PH_W   , 0,
17048        DSP_                },        /* PRECRQ_RS.PH.W */
17049     { reserved_block      , 0                   , 0   , 32,
17050        0xfc0003ff, 0x20000135, 0                      , 0,
17051        0x0                 },        /* _POOL32A5~*(38) */
17052     { reserved_block      , 0                   , 0   , 32,
17053        0xfc0003ff, 0x2000013d, 0                      , 0,
17054        0x0                 },        /* _POOL32A5~*(39) */
17055     { instruction         , 0                   , 0   , 32,
17056        0xfc0003ff, 0x20000145, &CMPGU_LE_QB      , 0,
17057        DSP_                },        /* CMPGU.LE.QB */
17058     { pool                , ADDUH__R__QB        , 2   , 32,
17059        0xfc0003ff, 0x2000014d, 0                      , 0,
17060        0x0                 },        /* ADDUH[_R].QB */
17061     { instruction         , 0                   , 0   , 32,
17062        0xfc0003ff, 0x20000155, &MULQ_S_PH        , 0,
17063        DSP_                },        /* MULQ_S.PH */
17064     { reserved_block      , 0                   , 0   , 32,
17065        0xfc0003ff, 0x2000015d, 0                      , 0,
17066        0x0                 },        /* _POOL32A5~*(43) */
17067     { reserved_block      , 0                   , 0   , 32,
17068        0xfc0003ff, 0x20000165, 0                      , 0,
17069        0x0                 },        /* _POOL32A5~*(44) */
17070     { instruction         , 0                   , 0   , 32,
17071        0xfc0003ff, 0x2000016d, &PRECRQU_S_QB_PH  , 0,
17072        DSP_                },        /* PRECRQU_S.QB.PH */
17073     { reserved_block      , 0                   , 0   , 32,
17074        0xfc0003ff, 0x20000175, 0                      , 0,
17075        0x0                 },        /* _POOL32A5~*(46) */
17076     { reserved_block      , 0                   , 0   , 32,
17077        0xfc0003ff, 0x2000017d, 0                      , 0,
17078        0x0                 },        /* _POOL32A5~*(47) */
17079     { instruction         , 0                   , 0   , 32,
17080        0xfc0003ff, 0x20000185, &CMPGDU_EQ_QB     , 0,
17081        DSP_                },        /* CMPGDU.EQ.QB */
17082     { pool                , SHRAV__R__PH        , 2   , 32,
17083        0xfc0003ff, 0x2000018d, 0                      , 0,
17084        0x0                 },        /* SHRAV[_R].PH */
17085     { instruction         , 0                   , 0   , 32,
17086        0xfc0003ff, 0x20000195, &MULQ_RS_W        , 0,
17087        DSP_                },        /* MULQ_RS.W */
17088     { reserved_block      , 0                   , 0   , 32,
17089        0xfc0003ff, 0x2000019d, 0                      , 0,
17090        0x0                 },        /* _POOL32A5~*(51) */
17091     { reserved_block      , 0                   , 0   , 32,
17092        0xfc0003ff, 0x200001a5, 0                      , 0,
17093        0x0                 },        /* _POOL32A5~*(52) */
17094     { instruction         , 0                   , 0   , 32,
17095        0xfc0003ff, 0x200001ad, &PACKRL_PH        , 0,
17096        DSP_                },        /* PACKRL.PH */
17097     { reserved_block      , 0                   , 0   , 32,
17098        0xfc0003ff, 0x200001b5, 0                      , 0,
17099        0x0                 },        /* _POOL32A5~*(54) */
17100     { reserved_block      , 0                   , 0   , 32,
17101        0xfc0003ff, 0x200001bd, 0                      , 0,
17102        0x0                 },        /* _POOL32A5~*(55) */
17103     { instruction         , 0                   , 0   , 32,
17104        0xfc0003ff, 0x200001c5, &CMPGDU_LT_QB     , 0,
17105        DSP_                },        /* CMPGDU.LT.QB */
17106     { pool                , SHRAV__R__QB        , 2   , 32,
17107        0xfc0003ff, 0x200001cd, 0                      , 0,
17108        0x0                 },        /* SHRAV[_R].QB */
17109     { instruction         , 0                   , 0   , 32,
17110        0xfc0003ff, 0x200001d5, &MULQ_S_W         , 0,
17111        DSP_                },        /* MULQ_S.W */
17112     { reserved_block      , 0                   , 0   , 32,
17113        0xfc0003ff, 0x200001dd, 0                      , 0,
17114        0x0                 },        /* _POOL32A5~*(59) */
17115     { reserved_block      , 0                   , 0   , 32,
17116        0xfc0003ff, 0x200001e5, 0                      , 0,
17117        0x0                 },        /* _POOL32A5~*(60) */
17118     { instruction         , 0                   , 0   , 32,
17119        0xfc0003ff, 0x200001ed, &PICK_QB          , 0,
17120        DSP_                },        /* PICK.QB */
17121     { reserved_block      , 0                   , 0   , 32,
17122        0xfc0003ff, 0x200001f5, 0                      , 0,
17123        0x0                 },        /* _POOL32A5~*(62) */
17124     { reserved_block      , 0                   , 0   , 32,
17125        0xfc0003ff, 0x200001fd, 0                      , 0,
17126        0x0                 },        /* _POOL32A5~*(63) */
17127     { instruction         , 0                   , 0   , 32,
17128        0xfc0003ff, 0x20000205, &CMPGDU_LE_QB     , 0,
17129        DSP_                },        /* CMPGDU.LE.QB */
17130     { pool                , SUBQ__S__PH         , 2   , 32,
17131        0xfc0003ff, 0x2000020d, 0                      , 0,
17132        0x0                 },        /* SUBQ[_S].PH */
17133     { instruction         , 0                   , 0   , 32,
17134        0xfc0003ff, 0x20000215, &APPEND           , 0,
17135        DSP_                },        /* APPEND */
17136     { reserved_block      , 0                   , 0   , 32,
17137        0xfc0003ff, 0x2000021d, 0                      , 0,
17138        0x0                 },        /* _POOL32A5~*(67) */
17139     { reserved_block      , 0                   , 0   , 32,
17140        0xfc0003ff, 0x20000225, 0                      , 0,
17141        0x0                 },        /* _POOL32A5~*(68) */
17142     { instruction         , 0                   , 0   , 32,
17143        0xfc0003ff, 0x2000022d, &PICK_PH          , 0,
17144        DSP_                },        /* PICK.PH */
17145     { reserved_block      , 0                   , 0   , 32,
17146        0xfc0003ff, 0x20000235, 0                      , 0,
17147        0x0                 },        /* _POOL32A5~*(70) */
17148     { reserved_block      , 0                   , 0   , 32,
17149        0xfc0003ff, 0x2000023d, 0                      , 0,
17150        0x0                 },        /* _POOL32A5~*(71) */
17151     { instruction         , 0                   , 0   , 32,
17152        0xfc0003ff, 0x20000245, &CMPU_EQ_QB       , 0,
17153        DSP_                },        /* CMPU.EQ.QB */
17154     { pool                , SUBQH__R__PH        , 2   , 32,
17155        0xfc0003ff, 0x2000024d, 0                      , 0,
17156        0x0                 },        /* SUBQH[_R].PH */
17157     { instruction         , 0                   , 0   , 32,
17158        0xfc0003ff, 0x20000255, &PREPEND          , 0,
17159        DSP_                },        /* PREPEND */
17160     { reserved_block      , 0                   , 0   , 32,
17161        0xfc0003ff, 0x2000025d, 0                      , 0,
17162        0x0                 },        /* _POOL32A5~*(75) */
17163     { reserved_block      , 0                   , 0   , 32,
17164        0xfc0003ff, 0x20000265, 0                      , 0,
17165        0x0                 },        /* _POOL32A5~*(76) */
17166     { reserved_block      , 0                   , 0   , 32,
17167        0xfc0003ff, 0x2000026d, 0                      , 0,
17168        0x0                 },        /* _POOL32A5~*(77) */
17169     { reserved_block      , 0                   , 0   , 32,
17170        0xfc0003ff, 0x20000275, 0                      , 0,
17171        0x0                 },        /* _POOL32A5~*(78) */
17172     { reserved_block      , 0                   , 0   , 32,
17173        0xfc0003ff, 0x2000027d, 0                      , 0,
17174        0x0                 },        /* _POOL32A5~*(79) */
17175     { instruction         , 0                   , 0   , 32,
17176        0xfc0003ff, 0x20000285, &CMPU_LT_QB       , 0,
17177        DSP_                },        /* CMPU.LT.QB */
17178     { pool                , SUBQH__R__W         , 2   , 32,
17179        0xfc0003ff, 0x2000028d, 0                      , 0,
17180        0x0                 },        /* SUBQH[_R].W */
17181     { instruction         , 0                   , 0   , 32,
17182        0xfc0003ff, 0x20000295, &MODSUB           , 0,
17183        DSP_                },        /* MODSUB */
17184     { reserved_block      , 0                   , 0   , 32,
17185        0xfc0003ff, 0x2000029d, 0                      , 0,
17186        0x0                 },        /* _POOL32A5~*(83) */
17187     { reserved_block      , 0                   , 0   , 32,
17188        0xfc0003ff, 0x200002a5, 0                      , 0,
17189        0x0                 },        /* _POOL32A5~*(84) */
17190     { reserved_block      , 0                   , 0   , 32,
17191        0xfc0003ff, 0x200002ad, 0                      , 0,
17192        0x0                 },        /* _POOL32A5~*(85) */
17193     { reserved_block      , 0                   , 0   , 32,
17194        0xfc0003ff, 0x200002b5, 0                      , 0,
17195        0x0                 },        /* _POOL32A5~*(86) */
17196     { reserved_block      , 0                   , 0   , 32,
17197        0xfc0003ff, 0x200002bd, 0                      , 0,
17198        0x0                 },        /* _POOL32A5~*(87) */
17199     { instruction         , 0                   , 0   , 32,
17200        0xfc0003ff, 0x200002c5, &CMPU_LE_QB       , 0,
17201        DSP_                },        /* CMPU.LE.QB */
17202     { pool                , SUBU__S__QB         , 2   , 32,
17203        0xfc0003ff, 0x200002cd, 0                      , 0,
17204        0x0                 },        /* SUBU[_S].QB */
17205     { instruction         , 0                   , 0   , 32,
17206        0xfc0003ff, 0x200002d5, &SHRAV_R_W        , 0,
17207        DSP_                },        /* SHRAV_R.W */
17208     { reserved_block      , 0                   , 0   , 32,
17209        0xfc0003ff, 0x200002dd, 0                      , 0,
17210        0x0                 },        /* _POOL32A5~*(91) */
17211     { reserved_block      , 0                   , 0   , 32,
17212        0xfc0003ff, 0x200002e5, 0                      , 0,
17213        0x0                 },        /* _POOL32A5~*(92) */
17214     { reserved_block      , 0                   , 0   , 32,
17215        0xfc0003ff, 0x200002ed, 0                      , 0,
17216        0x0                 },        /* _POOL32A5~*(93) */
17217     { instruction         , 0                   , 0   , 32,
17218        0xfc0003ff, 0x200002f5, &SHRA_R_W         , 0,
17219        DSP_                },        /* SHRA_R.W */
17220     { reserved_block      , 0                   , 0   , 32,
17221        0xfc0003ff, 0x200002fd, 0                      , 0,
17222        0x0                 },        /* _POOL32A5~*(95) */
17223     { instruction         , 0                   , 0   , 32,
17224        0xfc0003ff, 0x20000305, &ADDQ_S_W         , 0,
17225        DSP_                },        /* ADDQ_S.W */
17226     { pool                , SUBU__S__PH         , 2   , 32,
17227        0xfc0003ff, 0x2000030d, 0                      , 0,
17228        0x0                 },        /* SUBU[_S].PH */
17229     { instruction         , 0                   , 0   , 32,
17230        0xfc0003ff, 0x20000315, &SHRLV_PH         , 0,
17231        DSP_                },        /* SHRLV.PH */
17232     { reserved_block      , 0                   , 0   , 32,
17233        0xfc0003ff, 0x2000031d, 0                      , 0,
17234        0x0                 },        /* _POOL32A5~*(99) */
17235     { reserved_block      , 0                   , 0   , 32,
17236        0xfc0003ff, 0x20000325, 0                      , 0,
17237        0x0                 },        /* _POOL32A5~*(100) */
17238     { reserved_block      , 0                   , 0   , 32,
17239        0xfc0003ff, 0x2000032d, 0                      , 0,
17240        0x0                 },        /* _POOL32A5~*(101) */
17241     { pool                , SHRA__R__PH         , 2   , 32,
17242        0xfc0003ff, 0x20000335, 0                      , 0,
17243        0x0                 },        /* SHRA[_R].PH */
17244     { reserved_block      , 0                   , 0   , 32,
17245        0xfc0003ff, 0x2000033d, 0                      , 0,
17246        0x0                 },        /* _POOL32A5~*(103) */
17247     { instruction         , 0                   , 0   , 32,
17248        0xfc0003ff, 0x20000345, &SUBQ_S_W         , 0,
17249        DSP_                },        /* SUBQ_S.W */
17250     { pool                , SUBUH__R__QB        , 2   , 32,
17251        0xfc0003ff, 0x2000034d, 0                      , 0,
17252        0x0                 },        /* SUBUH[_R].QB */
17253     { instruction         , 0                   , 0   , 32,
17254        0xfc0003ff, 0x20000355, &SHRLV_QB         , 0,
17255        DSP_                },        /* SHRLV.QB */
17256     { reserved_block      , 0                   , 0   , 32,
17257        0xfc0003ff, 0x2000035d, 0                      , 0,
17258        0x0                 },        /* _POOL32A5~*(107) */
17259     { reserved_block      , 0                   , 0   , 32,
17260        0xfc0003ff, 0x20000365, 0                      , 0,
17261        0x0                 },        /* _POOL32A5~*(108) */
17262     { reserved_block      , 0                   , 0   , 32,
17263        0xfc0003ff, 0x2000036d, 0                      , 0,
17264        0x0                 },        /* _POOL32A5~*(109) */
17265     { reserved_block      , 0                   , 0   , 32,
17266        0xfc0003ff, 0x20000375, 0                      , 0,
17267        0x0                 },        /* _POOL32A5~*(110) */
17268     { reserved_block      , 0                   , 0   , 32,
17269        0xfc0003ff, 0x2000037d, 0                      , 0,
17270        0x0                 },        /* _POOL32A5~*(111) */
17271     { instruction         , 0                   , 0   , 32,
17272        0xfc0003ff, 0x20000385, &ADDSC            , 0,
17273        DSP_                },        /* ADDSC */
17274     { pool                , SHLLV__S__PH        , 2   , 32,
17275        0xfc0003ff, 0x2000038d, 0                      , 0,
17276        0x0                 },        /* SHLLV[_S].PH */
17277     { instruction         , 0                   , 0   , 32,
17278        0xfc0003ff, 0x20000395, &SHLLV_QB         , 0,
17279        DSP_                },        /* SHLLV.QB */
17280     { reserved_block      , 0                   , 0   , 32,
17281        0xfc0003ff, 0x2000039d, 0                      , 0,
17282        0x0                 },        /* _POOL32A5~*(115) */
17283     { reserved_block      , 0                   , 0   , 32,
17284        0xfc0003ff, 0x200003a5, 0                      , 0,
17285        0x0                 },        /* _POOL32A5~*(116) */
17286     { reserved_block      , 0                   , 0   , 32,
17287        0xfc0003ff, 0x200003ad, 0                      , 0,
17288        0x0                 },        /* _POOL32A5~*(117) */
17289     { pool                , SHLL__S__PH         , 4   , 32,
17290        0xfc0003ff, 0x200003b5, 0                      , 0,
17291        0x0                 },        /* SHLL[_S].PH */
17292     { reserved_block      , 0                   , 0   , 32,
17293        0xfc0003ff, 0x200003bd, 0                      , 0,
17294        0x0                 },        /* _POOL32A5~*(119) */
17295     { instruction         , 0                   , 0   , 32,
17296        0xfc0003ff, 0x200003c5, &ADDWC            , 0,
17297        DSP_                },        /* ADDWC */
17298     { pool                , PRECR_SRA__R__PH_W  , 2   , 32,
17299        0xfc0003ff, 0x200003cd, 0                      , 0,
17300        0x0                 },        /* PRECR_SRA[_R].PH.W */
17301     { instruction         , 0                   , 0   , 32,
17302        0xfc0003ff, 0x200003d5, &SHLLV_S_W        , 0,
17303        DSP_                },        /* SHLLV_S.W */
17304     { reserved_block      , 0                   , 0   , 32,
17305        0xfc0003ff, 0x200003dd, 0                      , 0,
17306        0x0                 },        /* _POOL32A5~*(123) */
17307     { reserved_block      , 0                   , 0   , 32,
17308        0xfc0003ff, 0x200003e5, 0                      , 0,
17309        0x0                 },        /* _POOL32A5~*(124) */
17310     { reserved_block      , 0                   , 0   , 32,
17311        0xfc0003ff, 0x200003ed, 0                      , 0,
17312        0x0                 },        /* _POOL32A5~*(125) */
17313     { instruction         , 0                   , 0   , 32,
17314        0xfc0003ff, 0x200003f5, &SHLL_S_W         , 0,
17315        DSP_                },        /* SHLL_S.W */
17316     { reserved_block      , 0                   , 0   , 32,
17317        0xfc0003ff, 0x200003fd, 0                      , 0,
17318        0x0                 },        /* _POOL32A5~*(127) */
17319 };
17320 
17321 
17322 static const Pool PP_LSX[16] = {
17323     { instruction         , 0                   , 0   , 32,
17324        0xfc0007ff, 0x20000007, &LBX              , 0,
17325        0x0                 },        /* LBX */
17326     { instruction         , 0                   , 0   , 32,
17327        0xfc0007ff, 0x20000087, &SBX              , 0,
17328        XMMS_               },        /* SBX */
17329     { instruction         , 0                   , 0   , 32,
17330        0xfc0007ff, 0x20000107, &LBUX             , 0,
17331        0x0                 },        /* LBUX */
17332     { reserved_block      , 0                   , 0   , 32,
17333        0xfc0007ff, 0x20000187, 0                      , 0,
17334        0x0                 },        /* PP.LSX~*(3) */
17335     { instruction         , 0                   , 0   , 32,
17336        0xfc0007ff, 0x20000207, &LHX              , 0,
17337        0x0                 },        /* LHX */
17338     { instruction         , 0                   , 0   , 32,
17339        0xfc0007ff, 0x20000287, &SHX              , 0,
17340        XMMS_               },        /* SHX */
17341     { instruction         , 0                   , 0   , 32,
17342        0xfc0007ff, 0x20000307, &LHUX             , 0,
17343        0x0                 },        /* LHUX */
17344     { instruction         , 0                   , 0   , 32,
17345        0xfc0007ff, 0x20000387, &LWUX             , 0,
17346        MIPS64_             },        /* LWUX */
17347     { instruction         , 0                   , 0   , 32,
17348        0xfc0007ff, 0x20000407, &LWX              , 0,
17349        0x0                 },        /* LWX */
17350     { instruction         , 0                   , 0   , 32,
17351        0xfc0007ff, 0x20000487, &SWX              , 0,
17352        XMMS_               },        /* SWX */
17353     { instruction         , 0                   , 0   , 32,
17354        0xfc0007ff, 0x20000507, &LWC1X            , 0,
17355        CP1_                },        /* LWC1X */
17356     { instruction         , 0                   , 0   , 32,
17357        0xfc0007ff, 0x20000587, &SWC1X            , 0,
17358        CP1_                },        /* SWC1X */
17359     { instruction         , 0                   , 0   , 32,
17360        0xfc0007ff, 0x20000607, &LDX              , 0,
17361        MIPS64_             },        /* LDX */
17362     { instruction         , 0                   , 0   , 32,
17363        0xfc0007ff, 0x20000687, &SDX              , 0,
17364        MIPS64_             },        /* SDX */
17365     { instruction         , 0                   , 0   , 32,
17366        0xfc0007ff, 0x20000707, &LDC1X            , 0,
17367        CP1_                },        /* LDC1X */
17368     { instruction         , 0                   , 0   , 32,
17369        0xfc0007ff, 0x20000787, &SDC1X            , 0,
17370        CP1_                },        /* SDC1X */
17371 };
17372 
17373 
17374 static const Pool PP_LSXS[16] = {
17375     { reserved_block      , 0                   , 0   , 32,
17376        0xfc0007ff, 0x20000047, 0                      , 0,
17377        0x0                 },        /* PP.LSXS~*(0) */
17378     { reserved_block      , 0                   , 0   , 32,
17379        0xfc0007ff, 0x200000c7, 0                      , 0,
17380        0x0                 },        /* PP.LSXS~*(1) */
17381     { reserved_block      , 0                   , 0   , 32,
17382        0xfc0007ff, 0x20000147, 0                      , 0,
17383        0x0                 },        /* PP.LSXS~*(2) */
17384     { reserved_block      , 0                   , 0   , 32,
17385        0xfc0007ff, 0x200001c7, 0                      , 0,
17386        0x0                 },        /* PP.LSXS~*(3) */
17387     { instruction         , 0                   , 0   , 32,
17388        0xfc0007ff, 0x20000247, &LHXS             , 0,
17389        0x0                 },        /* LHXS */
17390     { instruction         , 0                   , 0   , 32,
17391        0xfc0007ff, 0x200002c7, &SHXS             , 0,
17392        XMMS_               },        /* SHXS */
17393     { instruction         , 0                   , 0   , 32,
17394        0xfc0007ff, 0x20000347, &LHUXS            , 0,
17395        0x0                 },        /* LHUXS */
17396     { instruction         , 0                   , 0   , 32,
17397        0xfc0007ff, 0x200003c7, &LWUXS            , 0,
17398        MIPS64_             },        /* LWUXS */
17399     { instruction         , 0                   , 0   , 32,
17400        0xfc0007ff, 0x20000447, &LWXS_32_         , 0,
17401        0x0                 },        /* LWXS[32] */
17402     { instruction         , 0                   , 0   , 32,
17403        0xfc0007ff, 0x200004c7, &SWXS             , 0,
17404        XMMS_               },        /* SWXS */
17405     { instruction         , 0                   , 0   , 32,
17406        0xfc0007ff, 0x20000547, &LWC1XS           , 0,
17407        CP1_                },        /* LWC1XS */
17408     { instruction         , 0                   , 0   , 32,
17409        0xfc0007ff, 0x200005c7, &SWC1XS           , 0,
17410        CP1_                },        /* SWC1XS */
17411     { instruction         , 0                   , 0   , 32,
17412        0xfc0007ff, 0x20000647, &LDXS             , 0,
17413        MIPS64_             },        /* LDXS */
17414     { instruction         , 0                   , 0   , 32,
17415        0xfc0007ff, 0x200006c7, &SDXS             , 0,
17416        MIPS64_             },        /* SDXS */
17417     { instruction         , 0                   , 0   , 32,
17418        0xfc0007ff, 0x20000747, &LDC1XS           , 0,
17419        CP1_                },        /* LDC1XS */
17420     { instruction         , 0                   , 0   , 32,
17421        0xfc0007ff, 0x200007c7, &SDC1XS           , 0,
17422        CP1_                },        /* SDC1XS */
17423 };
17424 
17425 
17426 static const Pool P_LSX[2] = {
17427     { pool                , PP_LSX              , 16  , 32,
17428        0xfc00007f, 0x20000007, 0                      , 0,
17429        0x0                 },        /* PP.LSX */
17430     { pool                , PP_LSXS             , 16  , 32,
17431        0xfc00007f, 0x20000047, 0                      , 0,
17432        0x0                 },        /* PP.LSXS */
17433 };
17434 
17435 
17436 static const Pool POOL32Axf_1_0[4] = {
17437     { instruction         , 0                   , 0   , 32,
17438        0xfc003fff, 0x2000007f, &MFHI_DSP_        , 0,
17439        DSP_                },        /* MFHI[DSP] */
17440     { instruction         , 0                   , 0   , 32,
17441        0xfc003fff, 0x2000107f, &MFLO_DSP_        , 0,
17442        DSP_                },        /* MFLO[DSP] */
17443     { instruction         , 0                   , 0   , 32,
17444        0xfc003fff, 0x2000207f, &MTHI_DSP_        , 0,
17445        DSP_                },        /* MTHI[DSP] */
17446     { instruction         , 0                   , 0   , 32,
17447        0xfc003fff, 0x2000307f, &MTLO_DSP_        , 0,
17448        DSP_                },        /* MTLO[DSP] */
17449 };
17450 
17451 
17452 static const Pool POOL32Axf_1_1[4] = {
17453     { instruction         , 0                   , 0   , 32,
17454        0xfc003fff, 0x2000027f, &MTHLIP           , 0,
17455        DSP_                },        /* MTHLIP */
17456     { instruction         , 0                   , 0   , 32,
17457        0xfc003fff, 0x2000127f, &SHILOV           , 0,
17458        DSP_                },        /* SHILOV */
17459     { reserved_block      , 0                   , 0   , 32,
17460        0xfc003fff, 0x2000227f, 0                      , 0,
17461        0x0                 },        /* POOL32Axf_1_1~*(2) */
17462     { reserved_block      , 0                   , 0   , 32,
17463        0xfc003fff, 0x2000327f, 0                      , 0,
17464        0x0                 },        /* POOL32Axf_1_1~*(3) */
17465 };
17466 
17467 
17468 static const Pool POOL32Axf_1_3[4] = {
17469     { instruction         , 0                   , 0   , 32,
17470        0xfc003fff, 0x2000067f, &RDDSP            , 0,
17471        DSP_                },        /* RDDSP */
17472     { instruction         , 0                   , 0   , 32,
17473        0xfc003fff, 0x2000167f, &WRDSP            , 0,
17474        DSP_                },        /* WRDSP */
17475     { instruction         , 0                   , 0   , 32,
17476        0xfc003fff, 0x2000267f, &EXTP             , 0,
17477        DSP_                },        /* EXTP */
17478     { instruction         , 0                   , 0   , 32,
17479        0xfc003fff, 0x2000367f, &EXTPDP           , 0,
17480        DSP_                },        /* EXTPDP */
17481 };
17482 
17483 
17484 static const Pool POOL32Axf_1_4[2] = {
17485     { instruction         , 0                   , 0   , 32,
17486        0xfc001fff, 0x2000087f, &SHLL_QB          , 0,
17487        DSP_                },        /* SHLL.QB */
17488     { instruction         , 0                   , 0   , 32,
17489        0xfc001fff, 0x2000187f, &SHRL_QB          , 0,
17490        DSP_                },        /* SHRL.QB */
17491 };
17492 
17493 
17494 static const Pool MAQ_S_A__W_PHR[2] = {
17495     { instruction         , 0                   , 0   , 32,
17496        0xfc003fff, 0x20000a7f, &MAQ_S_W_PHR      , 0,
17497        DSP_                },        /* MAQ_S.W.PHR */
17498     { instruction         , 0                   , 0   , 32,
17499        0xfc003fff, 0x20002a7f, &MAQ_SA_W_PHR     , 0,
17500        DSP_                },        /* MAQ_SA.W.PHR */
17501 };
17502 
17503 
17504 static const Pool MAQ_S_A__W_PHL[2] = {
17505     { instruction         , 0                   , 0   , 32,
17506        0xfc003fff, 0x20001a7f, &MAQ_S_W_PHL      , 0,
17507        DSP_                },        /* MAQ_S.W.PHL */
17508     { instruction         , 0                   , 0   , 32,
17509        0xfc003fff, 0x20003a7f, &MAQ_SA_W_PHL     , 0,
17510        DSP_                },        /* MAQ_SA.W.PHL */
17511 };
17512 
17513 
17514 static const Pool POOL32Axf_1_5[2] = {
17515     { pool                , MAQ_S_A__W_PHR      , 2   , 32,
17516        0xfc001fff, 0x20000a7f, 0                      , 0,
17517        0x0                 },        /* MAQ_S[A].W.PHR */
17518     { pool                , MAQ_S_A__W_PHL      , 2   , 32,
17519        0xfc001fff, 0x20001a7f, 0                      , 0,
17520        0x0                 },        /* MAQ_S[A].W.PHL */
17521 };
17522 
17523 
17524 static const Pool POOL32Axf_1_7[4] = {
17525     { instruction         , 0                   , 0   , 32,
17526        0xfc003fff, 0x20000e7f, &EXTR_W           , 0,
17527        DSP_                },        /* EXTR.W */
17528     { instruction         , 0                   , 0   , 32,
17529        0xfc003fff, 0x20001e7f, &EXTR_R_W         , 0,
17530        DSP_                },        /* EXTR_R.W */
17531     { instruction         , 0                   , 0   , 32,
17532        0xfc003fff, 0x20002e7f, &EXTR_RS_W        , 0,
17533        DSP_                },        /* EXTR_RS.W */
17534     { instruction         , 0                   , 0   , 32,
17535        0xfc003fff, 0x20003e7f, &EXTR_S_H         , 0,
17536        DSP_                },        /* EXTR_S.H */
17537 };
17538 
17539 
17540 static const Pool POOL32Axf_1[8] = {
17541     { pool                , POOL32Axf_1_0       , 4   , 32,
17542        0xfc000fff, 0x2000007f, 0                      , 0,
17543        0x0                 },        /* POOL32Axf_1_0 */
17544     { pool                , POOL32Axf_1_1       , 4   , 32,
17545        0xfc000fff, 0x2000027f, 0                      , 0,
17546        0x0                 },        /* POOL32Axf_1_1 */
17547     { reserved_block      , 0                   , 0   , 32,
17548        0xfc000fff, 0x2000047f, 0                      , 0,
17549        0x0                 },        /* POOL32Axf_1~*(2) */
17550     { pool                , POOL32Axf_1_3       , 4   , 32,
17551        0xfc000fff, 0x2000067f, 0                      , 0,
17552        0x0                 },        /* POOL32Axf_1_3 */
17553     { pool                , POOL32Axf_1_4       , 2   , 32,
17554        0xfc000fff, 0x2000087f, 0                      , 0,
17555        0x0                 },        /* POOL32Axf_1_4 */
17556     { pool                , POOL32Axf_1_5       , 2   , 32,
17557        0xfc000fff, 0x20000a7f, 0                      , 0,
17558        0x0                 },        /* POOL32Axf_1_5 */
17559     { reserved_block      , 0                   , 0   , 32,
17560        0xfc000fff, 0x20000c7f, 0                      , 0,
17561        0x0                 },        /* POOL32Axf_1~*(6) */
17562     { pool                , POOL32Axf_1_7       , 4   , 32,
17563        0xfc000fff, 0x20000e7f, 0                      , 0,
17564        0x0                 },        /* POOL32Axf_1_7 */
17565 };
17566 
17567 
17568 static const Pool POOL32Axf_2_DSP__0_7[8] = {
17569     { instruction         , 0                   , 0   , 32,
17570        0xfc003fff, 0x200000bf, &DPA_W_PH         , 0,
17571        DSP_                },        /* DPA.W.PH */
17572     { instruction         , 0                   , 0   , 32,
17573        0xfc003fff, 0x200002bf, &DPAQ_S_W_PH      , 0,
17574        DSP_                },        /* DPAQ_S.W.PH */
17575     { instruction         , 0                   , 0   , 32,
17576        0xfc003fff, 0x200004bf, &DPS_W_PH         , 0,
17577        DSP_                },        /* DPS.W.PH */
17578     { instruction         , 0                   , 0   , 32,
17579        0xfc003fff, 0x200006bf, &DPSQ_S_W_PH      , 0,
17580        DSP_                },        /* DPSQ_S.W.PH */
17581     { reserved_block      , 0                   , 0   , 32,
17582        0xfc003fff, 0x200008bf, 0                      , 0,
17583        0x0                 },        /* POOL32Axf_2(DSP)_0_7~*(4) */
17584     { instruction         , 0                   , 0   , 32,
17585        0xfc003fff, 0x20000abf, &MADD_DSP_        , 0,
17586        DSP_                },        /* MADD[DSP] */
17587     { instruction         , 0                   , 0   , 32,
17588        0xfc003fff, 0x20000cbf, &MULT_DSP_        , 0,
17589        DSP_                },        /* MULT[DSP] */
17590     { instruction         , 0                   , 0   , 32,
17591        0xfc003fff, 0x20000ebf, &EXTRV_W          , 0,
17592        DSP_                },        /* EXTRV.W */
17593 };
17594 
17595 
17596 static const Pool POOL32Axf_2_DSP__8_15[8] = {
17597     { instruction         , 0                   , 0   , 32,
17598        0xfc003fff, 0x200010bf, &DPAX_W_PH        , 0,
17599        DSP_                },        /* DPAX.W.PH */
17600     { instruction         , 0                   , 0   , 32,
17601        0xfc003fff, 0x200012bf, &DPAQ_SA_L_W      , 0,
17602        DSP_                },        /* DPAQ_SA.L.W */
17603     { instruction         , 0                   , 0   , 32,
17604        0xfc003fff, 0x200014bf, &DPSX_W_PH        , 0,
17605        DSP_                },        /* DPSX.W.PH */
17606     { instruction         , 0                   , 0   , 32,
17607        0xfc003fff, 0x200016bf, &DPSQ_SA_L_W      , 0,
17608        DSP_                },        /* DPSQ_SA.L.W */
17609     { reserved_block      , 0                   , 0   , 32,
17610        0xfc003fff, 0x200018bf, 0                      , 0,
17611        0x0                 },        /* POOL32Axf_2(DSP)_8_15~*(4) */
17612     { instruction         , 0                   , 0   , 32,
17613        0xfc003fff, 0x20001abf, &MADDU_DSP_       , 0,
17614        DSP_                },        /* MADDU[DSP] */
17615     { instruction         , 0                   , 0   , 32,
17616        0xfc003fff, 0x20001cbf, &MULTU_DSP_       , 0,
17617        DSP_                },        /* MULTU[DSP] */
17618     { instruction         , 0                   , 0   , 32,
17619        0xfc003fff, 0x20001ebf, &EXTRV_R_W        , 0,
17620        DSP_                },        /* EXTRV_R.W */
17621 };
17622 
17623 
17624 static const Pool POOL32Axf_2_DSP__16_23[8] = {
17625     { instruction         , 0                   , 0   , 32,
17626        0xfc003fff, 0x200020bf, &DPAU_H_QBL       , 0,
17627        DSP_                },        /* DPAU.H.QBL */
17628     { instruction         , 0                   , 0   , 32,
17629        0xfc003fff, 0x200022bf, &DPAQX_S_W_PH     , 0,
17630        DSP_                },        /* DPAQX_S.W.PH */
17631     { instruction         , 0                   , 0   , 32,
17632        0xfc003fff, 0x200024bf, &DPSU_H_QBL       , 0,
17633        DSP_                },        /* DPSU.H.QBL */
17634     { instruction         , 0                   , 0   , 32,
17635        0xfc003fff, 0x200026bf, &DPSQX_S_W_PH     , 0,
17636        DSP_                },        /* DPSQX_S.W.PH */
17637     { instruction         , 0                   , 0   , 32,
17638        0xfc003fff, 0x200028bf, &EXTPV            , 0,
17639        DSP_                },        /* EXTPV */
17640     { instruction         , 0                   , 0   , 32,
17641        0xfc003fff, 0x20002abf, &MSUB_DSP_        , 0,
17642        DSP_                },        /* MSUB[DSP] */
17643     { instruction         , 0                   , 0   , 32,
17644        0xfc003fff, 0x20002cbf, &MULSA_W_PH       , 0,
17645        DSP_                },        /* MULSA.W.PH */
17646     { instruction         , 0                   , 0   , 32,
17647        0xfc003fff, 0x20002ebf, &EXTRV_RS_W       , 0,
17648        DSP_                },        /* EXTRV_RS.W */
17649 };
17650 
17651 
17652 static const Pool POOL32Axf_2_DSP__24_31[8] = {
17653     { instruction         , 0                   , 0   , 32,
17654        0xfc003fff, 0x200030bf, &DPAU_H_QBR       , 0,
17655        DSP_                },        /* DPAU.H.QBR */
17656     { instruction         , 0                   , 0   , 32,
17657        0xfc003fff, 0x200032bf, &DPAQX_SA_W_PH    , 0,
17658        DSP_                },        /* DPAQX_SA.W.PH */
17659     { instruction         , 0                   , 0   , 32,
17660        0xfc003fff, 0x200034bf, &DPSU_H_QBR       , 0,
17661        DSP_                },        /* DPSU.H.QBR */
17662     { instruction         , 0                   , 0   , 32,
17663        0xfc003fff, 0x200036bf, &DPSQX_SA_W_PH    , 0,
17664        DSP_                },        /* DPSQX_SA.W.PH */
17665     { instruction         , 0                   , 0   , 32,
17666        0xfc003fff, 0x200038bf, &EXTPDPV          , 0,
17667        DSP_                },        /* EXTPDPV */
17668     { instruction         , 0                   , 0   , 32,
17669        0xfc003fff, 0x20003abf, &MSUBU_DSP_       , 0,
17670        DSP_                },        /* MSUBU[DSP] */
17671     { instruction         , 0                   , 0   , 32,
17672        0xfc003fff, 0x20003cbf, &MULSAQ_S_W_PH    , 0,
17673        DSP_                },        /* MULSAQ_S.W.PH */
17674     { instruction         , 0                   , 0   , 32,
17675        0xfc003fff, 0x20003ebf, &EXTRV_S_H        , 0,
17676        DSP_                },        /* EXTRV_S.H */
17677 };
17678 
17679 
17680 static const Pool POOL32Axf_2[4] = {
17681     { pool                , POOL32Axf_2_DSP__0_7, 8   , 32,
17682        0xfc0031ff, 0x200000bf, 0                      , 0,
17683        0x0                 },        /* POOL32Axf_2(DSP)_0_7 */
17684     { pool                , POOL32Axf_2_DSP__8_15, 8   , 32,
17685        0xfc0031ff, 0x200010bf, 0                      , 0,
17686        0x0                 },        /* POOL32Axf_2(DSP)_8_15 */
17687     { pool                , POOL32Axf_2_DSP__16_23, 8   , 32,
17688        0xfc0031ff, 0x200020bf, 0                      , 0,
17689        0x0                 },        /* POOL32Axf_2(DSP)_16_23 */
17690     { pool                , POOL32Axf_2_DSP__24_31, 8   , 32,
17691        0xfc0031ff, 0x200030bf, 0                      , 0,
17692        0x0                 },        /* POOL32Axf_2(DSP)_24_31 */
17693 };
17694 
17695 
17696 static const Pool POOL32Axf_4[128] = {
17697     { instruction         , 0                   , 0   , 32,
17698        0xfc00ffff, 0x2000013f, &ABSQ_S_QB        , 0,
17699        DSP_                },        /* ABSQ_S.QB */
17700     { instruction         , 0                   , 0   , 32,
17701        0xfc00ffff, 0x2000033f, &REPLV_PH         , 0,
17702        DSP_                },        /* REPLV.PH */
17703     { reserved_block      , 0                   , 0   , 32,
17704        0xfc00ffff, 0x2000053f, 0                      , 0,
17705        0x0                 },        /* POOL32Axf_4~*(2) */
17706     { reserved_block      , 0                   , 0   , 32,
17707        0xfc00ffff, 0x2000073f, 0                      , 0,
17708        0x0                 },        /* POOL32Axf_4~*(3) */
17709     { reserved_block      , 0                   , 0   , 32,
17710        0xfc00ffff, 0x2000093f, 0                      , 0,
17711        0x0                 },        /* POOL32Axf_4~*(4) */
17712     { reserved_block      , 0                   , 0   , 32,
17713        0xfc00ffff, 0x20000b3f, 0                      , 0,
17714        0x0                 },        /* POOL32Axf_4~*(5) */
17715     { reserved_block      , 0                   , 0   , 32,
17716        0xfc00ffff, 0x20000d3f, 0                      , 0,
17717        0x0                 },        /* POOL32Axf_4~*(6) */
17718     { reserved_block      , 0                   , 0   , 32,
17719        0xfc00ffff, 0x20000f3f, 0                      , 0,
17720        0x0                 },        /* POOL32Axf_4~*(7) */
17721     { instruction         , 0                   , 0   , 32,
17722        0xfc00ffff, 0x2000113f, &ABSQ_S_PH        , 0,
17723        DSP_                },        /* ABSQ_S.PH */
17724     { instruction         , 0                   , 0   , 32,
17725        0xfc00ffff, 0x2000133f, &REPLV_QB         , 0,
17726        DSP_                },        /* REPLV.QB */
17727     { reserved_block      , 0                   , 0   , 32,
17728        0xfc00ffff, 0x2000153f, 0                      , 0,
17729        0x0                 },        /* POOL32Axf_4~*(10) */
17730     { reserved_block      , 0                   , 0   , 32,
17731        0xfc00ffff, 0x2000173f, 0                      , 0,
17732        0x0                 },        /* POOL32Axf_4~*(11) */
17733     { reserved_block      , 0                   , 0   , 32,
17734        0xfc00ffff, 0x2000193f, 0                      , 0,
17735        0x0                 },        /* POOL32Axf_4~*(12) */
17736     { reserved_block      , 0                   , 0   , 32,
17737        0xfc00ffff, 0x20001b3f, 0                      , 0,
17738        0x0                 },        /* POOL32Axf_4~*(13) */
17739     { reserved_block      , 0                   , 0   , 32,
17740        0xfc00ffff, 0x20001d3f, 0                      , 0,
17741        0x0                 },        /* POOL32Axf_4~*(14) */
17742     { reserved_block      , 0                   , 0   , 32,
17743        0xfc00ffff, 0x20001f3f, 0                      , 0,
17744        0x0                 },        /* POOL32Axf_4~*(15) */
17745     { instruction         , 0                   , 0   , 32,
17746        0xfc00ffff, 0x2000213f, &ABSQ_S_W         , 0,
17747        DSP_                },        /* ABSQ_S.W */
17748     { reserved_block      , 0                   , 0   , 32,
17749        0xfc00ffff, 0x2000233f, 0                      , 0,
17750        0x0                 },        /* POOL32Axf_4~*(17) */
17751     { reserved_block      , 0                   , 0   , 32,
17752        0xfc00ffff, 0x2000253f, 0                      , 0,
17753        0x0                 },        /* POOL32Axf_4~*(18) */
17754     { reserved_block      , 0                   , 0   , 32,
17755        0xfc00ffff, 0x2000273f, 0                      , 0,
17756        0x0                 },        /* POOL32Axf_4~*(19) */
17757     { reserved_block      , 0                   , 0   , 32,
17758        0xfc00ffff, 0x2000293f, 0                      , 0,
17759        0x0                 },        /* POOL32Axf_4~*(20) */
17760     { reserved_block      , 0                   , 0   , 32,
17761        0xfc00ffff, 0x20002b3f, 0                      , 0,
17762        0x0                 },        /* POOL32Axf_4~*(21) */
17763     { reserved_block      , 0                   , 0   , 32,
17764        0xfc00ffff, 0x20002d3f, 0                      , 0,
17765        0x0                 },        /* POOL32Axf_4~*(22) */
17766     { reserved_block      , 0                   , 0   , 32,
17767        0xfc00ffff, 0x20002f3f, 0                      , 0,
17768        0x0                 },        /* POOL32Axf_4~*(23) */
17769     { reserved_block      , 0                   , 0   , 32,
17770        0xfc00ffff, 0x2000313f, 0                      , 0,
17771        0x0                 },        /* POOL32Axf_4~*(24) */
17772     { reserved_block      , 0                   , 0   , 32,
17773        0xfc00ffff, 0x2000333f, 0                      , 0,
17774        0x0                 },        /* POOL32Axf_4~*(25) */
17775     { reserved_block      , 0                   , 0   , 32,
17776        0xfc00ffff, 0x2000353f, 0                      , 0,
17777        0x0                 },        /* POOL32Axf_4~*(26) */
17778     { reserved_block      , 0                   , 0   , 32,
17779        0xfc00ffff, 0x2000373f, 0                      , 0,
17780        0x0                 },        /* POOL32Axf_4~*(27) */
17781     { reserved_block      , 0                   , 0   , 32,
17782        0xfc00ffff, 0x2000393f, 0                      , 0,
17783        0x0                 },        /* POOL32Axf_4~*(28) */
17784     { reserved_block      , 0                   , 0   , 32,
17785        0xfc00ffff, 0x20003b3f, 0                      , 0,
17786        0x0                 },        /* POOL32Axf_4~*(29) */
17787     { reserved_block      , 0                   , 0   , 32,
17788        0xfc00ffff, 0x20003d3f, 0                      , 0,
17789        0x0                 },        /* POOL32Axf_4~*(30) */
17790     { reserved_block      , 0                   , 0   , 32,
17791        0xfc00ffff, 0x20003f3f, 0                      , 0,
17792        0x0                 },        /* POOL32Axf_4~*(31) */
17793     { instruction         , 0                   , 0   , 32,
17794        0xfc00ffff, 0x2000413f, &INSV             , 0,
17795        DSP_                },        /* INSV */
17796     { reserved_block      , 0                   , 0   , 32,
17797        0xfc00ffff, 0x2000433f, 0                      , 0,
17798        0x0                 },        /* POOL32Axf_4~*(33) */
17799     { reserved_block      , 0                   , 0   , 32,
17800        0xfc00ffff, 0x2000453f, 0                      , 0,
17801        0x0                 },        /* POOL32Axf_4~*(34) */
17802     { reserved_block      , 0                   , 0   , 32,
17803        0xfc00ffff, 0x2000473f, 0                      , 0,
17804        0x0                 },        /* POOL32Axf_4~*(35) */
17805     { reserved_block      , 0                   , 0   , 32,
17806        0xfc00ffff, 0x2000493f, 0                      , 0,
17807        0x0                 },        /* POOL32Axf_4~*(36) */
17808     { instruction         , 0                   , 0   , 32,
17809        0xfc00ffff, 0x20004b3f, &CLO              , 0,
17810        XMMS_               },        /* CLO */
17811     { instruction         , 0                   , 0   , 32,
17812        0xfc00ffff, 0x20004d3f, &MFC2             , 0,
17813        CP2_                },        /* MFC2 */
17814     { reserved_block      , 0                   , 0   , 32,
17815        0xfc00ffff, 0x20004f3f, 0                      , 0,
17816        0x0                 },        /* POOL32Axf_4~*(39) */
17817     { instruction         , 0                   , 0   , 32,
17818        0xfc00ffff, 0x2000513f, &PRECEQ_W_PHL     , 0,
17819        DSP_                },        /* PRECEQ.W.PHL */
17820     { reserved_block      , 0                   , 0   , 32,
17821        0xfc00ffff, 0x2000533f, 0                      , 0,
17822        0x0                 },        /* POOL32Axf_4~*(41) */
17823     { reserved_block      , 0                   , 0   , 32,
17824        0xfc00ffff, 0x2000553f, 0                      , 0,
17825        0x0                 },        /* POOL32Axf_4~*(42) */
17826     { reserved_block      , 0                   , 0   , 32,
17827        0xfc00ffff, 0x2000573f, 0                      , 0,
17828        0x0                 },        /* POOL32Axf_4~*(43) */
17829     { reserved_block      , 0                   , 0   , 32,
17830        0xfc00ffff, 0x2000593f, 0                      , 0,
17831        0x0                 },        /* POOL32Axf_4~*(44) */
17832     { instruction         , 0                   , 0   , 32,
17833        0xfc00ffff, 0x20005b3f, &CLZ              , 0,
17834        XMMS_               },        /* CLZ */
17835     { instruction         , 0                   , 0   , 32,
17836        0xfc00ffff, 0x20005d3f, &MTC2             , 0,
17837        CP2_                },        /* MTC2 */
17838     { reserved_block      , 0                   , 0   , 32,
17839        0xfc00ffff, 0x20005f3f, 0                      , 0,
17840        0x0                 },        /* POOL32Axf_4~*(47) */
17841     { instruction         , 0                   , 0   , 32,
17842        0xfc00ffff, 0x2000613f, &PRECEQ_W_PHR     , 0,
17843        DSP_                },        /* PRECEQ.W.PHR */
17844     { reserved_block      , 0                   , 0   , 32,
17845        0xfc00ffff, 0x2000633f, 0                      , 0,
17846        0x0                 },        /* POOL32Axf_4~*(49) */
17847     { reserved_block      , 0                   , 0   , 32,
17848        0xfc00ffff, 0x2000653f, 0                      , 0,
17849        0x0                 },        /* POOL32Axf_4~*(50) */
17850     { reserved_block      , 0                   , 0   , 32,
17851        0xfc00ffff, 0x2000673f, 0                      , 0,
17852        0x0                 },        /* POOL32Axf_4~*(51) */
17853     { reserved_block      , 0                   , 0   , 32,
17854        0xfc00ffff, 0x2000693f, 0                      , 0,
17855        0x0                 },        /* POOL32Axf_4~*(52) */
17856     { reserved_block      , 0                   , 0   , 32,
17857        0xfc00ffff, 0x20006b3f, 0                      , 0,
17858        0x0                 },        /* POOL32Axf_4~*(53) */
17859     { instruction         , 0                   , 0   , 32,
17860        0xfc00ffff, 0x20006d3f, &DMFC2            , 0,
17861        CP2_                },        /* DMFC2 */
17862     { reserved_block      , 0                   , 0   , 32,
17863        0xfc00ffff, 0x20006f3f, 0                      , 0,
17864        0x0                 },        /* POOL32Axf_4~*(55) */
17865     { instruction         , 0                   , 0   , 32,
17866        0xfc00ffff, 0x2000713f, &PRECEQU_PH_QBL   , 0,
17867        DSP_                },        /* PRECEQU.PH.QBL */
17868     { instruction         , 0                   , 0   , 32,
17869        0xfc00ffff, 0x2000733f, &PRECEQU_PH_QBLA  , 0,
17870        DSP_                },        /* PRECEQU.PH.QBLA */
17871     { reserved_block      , 0                   , 0   , 32,
17872        0xfc00ffff, 0x2000753f, 0                      , 0,
17873        0x0                 },        /* POOL32Axf_4~*(58) */
17874     { reserved_block      , 0                   , 0   , 32,
17875        0xfc00ffff, 0x2000773f, 0                      , 0,
17876        0x0                 },        /* POOL32Axf_4~*(59) */
17877     { reserved_block      , 0                   , 0   , 32,
17878        0xfc00ffff, 0x2000793f, 0                      , 0,
17879        0x0                 },        /* POOL32Axf_4~*(60) */
17880     { reserved_block      , 0                   , 0   , 32,
17881        0xfc00ffff, 0x20007b3f, 0                      , 0,
17882        0x0                 },        /* POOL32Axf_4~*(61) */
17883     { instruction         , 0                   , 0   , 32,
17884        0xfc00ffff, 0x20007d3f, &DMTC2            , 0,
17885        CP2_                },        /* DMTC2 */
17886     { reserved_block      , 0                   , 0   , 32,
17887        0xfc00ffff, 0x20007f3f, 0                      , 0,
17888        0x0                 },        /* POOL32Axf_4~*(63) */
17889     { reserved_block      , 0                   , 0   , 32,
17890        0xfc00ffff, 0x2000813f, 0                      , 0,
17891        0x0                 },        /* POOL32Axf_4~*(64) */
17892     { reserved_block      , 0                   , 0   , 32,
17893        0xfc00ffff, 0x2000833f, 0                      , 0,
17894        0x0                 },        /* POOL32Axf_4~*(65) */
17895     { reserved_block      , 0                   , 0   , 32,
17896        0xfc00ffff, 0x2000853f, 0                      , 0,
17897        0x0                 },        /* POOL32Axf_4~*(66) */
17898     { reserved_block      , 0                   , 0   , 32,
17899        0xfc00ffff, 0x2000873f, 0                      , 0,
17900        0x0                 },        /* POOL32Axf_4~*(67) */
17901     { reserved_block      , 0                   , 0   , 32,
17902        0xfc00ffff, 0x2000893f, 0                      , 0,
17903        0x0                 },        /* POOL32Axf_4~*(68) */
17904     { reserved_block      , 0                   , 0   , 32,
17905        0xfc00ffff, 0x20008b3f, 0                      , 0,
17906        0x0                 },        /* POOL32Axf_4~*(69) */
17907     { instruction         , 0                   , 0   , 32,
17908        0xfc00ffff, 0x20008d3f, &MFHC2            , 0,
17909        CP2_                },        /* MFHC2 */
17910     { reserved_block      , 0                   , 0   , 32,
17911        0xfc00ffff, 0x20008f3f, 0                      , 0,
17912        0x0                 },        /* POOL32Axf_4~*(71) */
17913     { instruction         , 0                   , 0   , 32,
17914        0xfc00ffff, 0x2000913f, &PRECEQU_PH_QBR   , 0,
17915        DSP_                },        /* PRECEQU.PH.QBR */
17916     { instruction         , 0                   , 0   , 32,
17917        0xfc00ffff, 0x2000933f, &PRECEQU_PH_QBRA  , 0,
17918        DSP_                },        /* PRECEQU.PH.QBRA */
17919     { reserved_block      , 0                   , 0   , 32,
17920        0xfc00ffff, 0x2000953f, 0                      , 0,
17921        0x0                 },        /* POOL32Axf_4~*(74) */
17922     { reserved_block      , 0                   , 0   , 32,
17923        0xfc00ffff, 0x2000973f, 0                      , 0,
17924        0x0                 },        /* POOL32Axf_4~*(75) */
17925     { reserved_block      , 0                   , 0   , 32,
17926        0xfc00ffff, 0x2000993f, 0                      , 0,
17927        0x0                 },        /* POOL32Axf_4~*(76) */
17928     { reserved_block      , 0                   , 0   , 32,
17929        0xfc00ffff, 0x20009b3f, 0                      , 0,
17930        0x0                 },        /* POOL32Axf_4~*(77) */
17931     { instruction         , 0                   , 0   , 32,
17932        0xfc00ffff, 0x20009d3f, &MTHC2            , 0,
17933        CP2_                },        /* MTHC2 */
17934     { reserved_block      , 0                   , 0   , 32,
17935        0xfc00ffff, 0x20009f3f, 0                      , 0,
17936        0x0                 },        /* POOL32Axf_4~*(79) */
17937     { reserved_block      , 0                   , 0   , 32,
17938        0xfc00ffff, 0x2000a13f, 0                      , 0,
17939        0x0                 },        /* POOL32Axf_4~*(80) */
17940     { reserved_block      , 0                   , 0   , 32,
17941        0xfc00ffff, 0x2000a33f, 0                      , 0,
17942        0x0                 },        /* POOL32Axf_4~*(81) */
17943     { reserved_block      , 0                   , 0   , 32,
17944        0xfc00ffff, 0x2000a53f, 0                      , 0,
17945        0x0                 },        /* POOL32Axf_4~*(82) */
17946     { reserved_block      , 0                   , 0   , 32,
17947        0xfc00ffff, 0x2000a73f, 0                      , 0,
17948        0x0                 },        /* POOL32Axf_4~*(83) */
17949     { reserved_block      , 0                   , 0   , 32,
17950        0xfc00ffff, 0x2000a93f, 0                      , 0,
17951        0x0                 },        /* POOL32Axf_4~*(84) */
17952     { reserved_block      , 0                   , 0   , 32,
17953        0xfc00ffff, 0x2000ab3f, 0                      , 0,
17954        0x0                 },        /* POOL32Axf_4~*(85) */
17955     { reserved_block      , 0                   , 0   , 32,
17956        0xfc00ffff, 0x2000ad3f, 0                      , 0,
17957        0x0                 },        /* POOL32Axf_4~*(86) */
17958     { reserved_block      , 0                   , 0   , 32,
17959        0xfc00ffff, 0x2000af3f, 0                      , 0,
17960        0x0                 },        /* POOL32Axf_4~*(87) */
17961     { instruction         , 0                   , 0   , 32,
17962        0xfc00ffff, 0x2000b13f, &PRECEU_PH_QBL    , 0,
17963        DSP_                },        /* PRECEU.PH.QBL */
17964     { instruction         , 0                   , 0   , 32,
17965        0xfc00ffff, 0x2000b33f, &PRECEU_PH_QBLA   , 0,
17966        DSP_                },        /* PRECEU.PH.QBLA */
17967     { reserved_block      , 0                   , 0   , 32,
17968        0xfc00ffff, 0x2000b53f, 0                      , 0,
17969        0x0                 },        /* POOL32Axf_4~*(90) */
17970     { reserved_block      , 0                   , 0   , 32,
17971        0xfc00ffff, 0x2000b73f, 0                      , 0,
17972        0x0                 },        /* POOL32Axf_4~*(91) */
17973     { reserved_block      , 0                   , 0   , 32,
17974        0xfc00ffff, 0x2000b93f, 0                      , 0,
17975        0x0                 },        /* POOL32Axf_4~*(92) */
17976     { reserved_block      , 0                   , 0   , 32,
17977        0xfc00ffff, 0x2000bb3f, 0                      , 0,
17978        0x0                 },        /* POOL32Axf_4~*(93) */
17979     { reserved_block      , 0                   , 0   , 32,
17980        0xfc00ffff, 0x2000bd3f, 0                      , 0,
17981        0x0                 },        /* POOL32Axf_4~*(94) */
17982     { reserved_block      , 0                   , 0   , 32,
17983        0xfc00ffff, 0x2000bf3f, 0                      , 0,
17984        0x0                 },        /* POOL32Axf_4~*(95) */
17985     { reserved_block      , 0                   , 0   , 32,
17986        0xfc00ffff, 0x2000c13f, 0                      , 0,
17987        0x0                 },        /* POOL32Axf_4~*(96) */
17988     { reserved_block      , 0                   , 0   , 32,
17989        0xfc00ffff, 0x2000c33f, 0                      , 0,
17990        0x0                 },        /* POOL32Axf_4~*(97) */
17991     { reserved_block      , 0                   , 0   , 32,
17992        0xfc00ffff, 0x2000c53f, 0                      , 0,
17993        0x0                 },        /* POOL32Axf_4~*(98) */
17994     { reserved_block      , 0                   , 0   , 32,
17995        0xfc00ffff, 0x2000c73f, 0                      , 0,
17996        0x0                 },        /* POOL32Axf_4~*(99) */
17997     { reserved_block      , 0                   , 0   , 32,
17998        0xfc00ffff, 0x2000c93f, 0                      , 0,
17999        0x0                 },        /* POOL32Axf_4~*(100) */
18000     { reserved_block      , 0                   , 0   , 32,
18001        0xfc00ffff, 0x2000cb3f, 0                      , 0,
18002        0x0                 },        /* POOL32Axf_4~*(101) */
18003     { instruction         , 0                   , 0   , 32,
18004        0xfc00ffff, 0x2000cd3f, &CFC2             , 0,
18005        CP2_                },        /* CFC2 */
18006     { reserved_block      , 0                   , 0   , 32,
18007        0xfc00ffff, 0x2000cf3f, 0                      , 0,
18008        0x0                 },        /* POOL32Axf_4~*(103) */
18009     { instruction         , 0                   , 0   , 32,
18010        0xfc00ffff, 0x2000d13f, &PRECEU_PH_QBR    , 0,
18011        DSP_                },        /* PRECEU.PH.QBR */
18012     { instruction         , 0                   , 0   , 32,
18013        0xfc00ffff, 0x2000d33f, &PRECEU_PH_QBRA   , 0,
18014        DSP_                },        /* PRECEU.PH.QBRA */
18015     { reserved_block      , 0                   , 0   , 32,
18016        0xfc00ffff, 0x2000d53f, 0                      , 0,
18017        0x0                 },        /* POOL32Axf_4~*(106) */
18018     { reserved_block      , 0                   , 0   , 32,
18019        0xfc00ffff, 0x2000d73f, 0                      , 0,
18020        0x0                 },        /* POOL32Axf_4~*(107) */
18021     { reserved_block      , 0                   , 0   , 32,
18022        0xfc00ffff, 0x2000d93f, 0                      , 0,
18023        0x0                 },        /* POOL32Axf_4~*(108) */
18024     { reserved_block      , 0                   , 0   , 32,
18025        0xfc00ffff, 0x2000db3f, 0                      , 0,
18026        0x0                 },        /* POOL32Axf_4~*(109) */
18027     { instruction         , 0                   , 0   , 32,
18028        0xfc00ffff, 0x2000dd3f, &CTC2             , 0,
18029        CP2_                },        /* CTC2 */
18030     { reserved_block      , 0                   , 0   , 32,
18031        0xfc00ffff, 0x2000df3f, 0                      , 0,
18032        0x0                 },        /* POOL32Axf_4~*(111) */
18033     { reserved_block      , 0                   , 0   , 32,
18034        0xfc00ffff, 0x2000e13f, 0                      , 0,
18035        0x0                 },        /* POOL32Axf_4~*(112) */
18036     { reserved_block      , 0                   , 0   , 32,
18037        0xfc00ffff, 0x2000e33f, 0                      , 0,
18038        0x0                 },        /* POOL32Axf_4~*(113) */
18039     { reserved_block      , 0                   , 0   , 32,
18040        0xfc00ffff, 0x2000e53f, 0                      , 0,
18041        0x0                 },        /* POOL32Axf_4~*(114) */
18042     { reserved_block      , 0                   , 0   , 32,
18043        0xfc00ffff, 0x2000e73f, 0                      , 0,
18044        0x0                 },        /* POOL32Axf_4~*(115) */
18045     { reserved_block      , 0                   , 0   , 32,
18046        0xfc00ffff, 0x2000e93f, 0                      , 0,
18047        0x0                 },        /* POOL32Axf_4~*(116) */
18048     { reserved_block      , 0                   , 0   , 32,
18049        0xfc00ffff, 0x2000eb3f, 0                      , 0,
18050        0x0                 },        /* POOL32Axf_4~*(117) */
18051     { reserved_block      , 0                   , 0   , 32,
18052        0xfc00ffff, 0x2000ed3f, 0                      , 0,
18053        0x0                 },        /* POOL32Axf_4~*(118) */
18054     { reserved_block      , 0                   , 0   , 32,
18055        0xfc00ffff, 0x2000ef3f, 0                      , 0,
18056        0x0                 },        /* POOL32Axf_4~*(119) */
18057     { instruction         , 0                   , 0   , 32,
18058        0xfc00ffff, 0x2000f13f, &RADDU_W_QB       , 0,
18059        DSP_                },        /* RADDU.W.QB */
18060     { reserved_block      , 0                   , 0   , 32,
18061        0xfc00ffff, 0x2000f33f, 0                      , 0,
18062        0x0                 },        /* POOL32Axf_4~*(121) */
18063     { reserved_block      , 0                   , 0   , 32,
18064        0xfc00ffff, 0x2000f53f, 0                      , 0,
18065        0x0                 },        /* POOL32Axf_4~*(122) */
18066     { reserved_block      , 0                   , 0   , 32,
18067        0xfc00ffff, 0x2000f73f, 0                      , 0,
18068        0x0                 },        /* POOL32Axf_4~*(123) */
18069     { reserved_block      , 0                   , 0   , 32,
18070        0xfc00ffff, 0x2000f93f, 0                      , 0,
18071        0x0                 },        /* POOL32Axf_4~*(124) */
18072     { reserved_block      , 0                   , 0   , 32,
18073        0xfc00ffff, 0x2000fb3f, 0                      , 0,
18074        0x0                 },        /* POOL32Axf_4~*(125) */
18075     { reserved_block      , 0                   , 0   , 32,
18076        0xfc00ffff, 0x2000fd3f, 0                      , 0,
18077        0x0                 },        /* POOL32Axf_4~*(126) */
18078     { reserved_block      , 0                   , 0   , 32,
18079        0xfc00ffff, 0x2000ff3f, 0                      , 0,
18080        0x0                 },        /* POOL32Axf_4~*(127) */
18081 };
18082 
18083 
18084 static const Pool POOL32Axf_5_group0[32] = {
18085     { instruction         , 0                   , 0   , 32,
18086        0xfc00ffff, 0x2000017f, &TLBGP            , 0,
18087        CP0_ | VZ_ | TLB_   },        /* TLBGP */
18088     { instruction         , 0                   , 0   , 32,
18089        0xfc00ffff, 0x2000037f, &TLBP             , 0,
18090        CP0_ | TLB_         },        /* TLBP */
18091     { instruction         , 0                   , 0   , 32,
18092        0xfc00ffff, 0x2000057f, &TLBGINV          , 0,
18093        CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINV */
18094     { instruction         , 0                   , 0   , 32,
18095        0xfc00ffff, 0x2000077f, &TLBINV           , 0,
18096        CP0_ | TLB_ | TLBINV_},        /* TLBINV */
18097     { reserved_block      , 0                   , 0   , 32,
18098        0xfc00ffff, 0x2000097f, 0                      , 0,
18099        0x0                 },        /* POOL32Axf_5_group0~*(4) */
18100     { reserved_block      , 0                   , 0   , 32,
18101        0xfc00ffff, 0x20000b7f, 0                      , 0,
18102        0x0                 },        /* POOL32Axf_5_group0~*(5) */
18103     { reserved_block      , 0                   , 0   , 32,
18104        0xfc00ffff, 0x20000d7f, 0                      , 0,
18105        0x0                 },        /* POOL32Axf_5_group0~*(6) */
18106     { reserved_block      , 0                   , 0   , 32,
18107        0xfc00ffff, 0x20000f7f, 0                      , 0,
18108        0x0                 },        /* POOL32Axf_5_group0~*(7) */
18109     { instruction         , 0                   , 0   , 32,
18110        0xfc00ffff, 0x2000117f, &TLBGR            , 0,
18111        CP0_ | VZ_ | TLB_   },        /* TLBGR */
18112     { instruction         , 0                   , 0   , 32,
18113        0xfc00ffff, 0x2000137f, &TLBR             , 0,
18114        CP0_ | TLB_         },        /* TLBR */
18115     { instruction         , 0                   , 0   , 32,
18116        0xfc00ffff, 0x2000157f, &TLBGINVF         , 0,
18117        CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINVF */
18118     { instruction         , 0                   , 0   , 32,
18119        0xfc00ffff, 0x2000177f, &TLBINVF          , 0,
18120        CP0_ | TLB_ | TLBINV_},        /* TLBINVF */
18121     { reserved_block      , 0                   , 0   , 32,
18122        0xfc00ffff, 0x2000197f, 0                      , 0,
18123        0x0                 },        /* POOL32Axf_5_group0~*(12) */
18124     { reserved_block      , 0                   , 0   , 32,
18125        0xfc00ffff, 0x20001b7f, 0                      , 0,
18126        0x0                 },        /* POOL32Axf_5_group0~*(13) */
18127     { reserved_block      , 0                   , 0   , 32,
18128        0xfc00ffff, 0x20001d7f, 0                      , 0,
18129        0x0                 },        /* POOL32Axf_5_group0~*(14) */
18130     { reserved_block      , 0                   , 0   , 32,
18131        0xfc00ffff, 0x20001f7f, 0                      , 0,
18132        0x0                 },        /* POOL32Axf_5_group0~*(15) */
18133     { instruction         , 0                   , 0   , 32,
18134        0xfc00ffff, 0x2000217f, &TLBGWI           , 0,
18135        CP0_ | VZ_ | TLB_   },        /* TLBGWI */
18136     { instruction         , 0                   , 0   , 32,
18137        0xfc00ffff, 0x2000237f, &TLBWI            , 0,
18138        CP0_ | TLB_         },        /* TLBWI */
18139     { reserved_block      , 0                   , 0   , 32,
18140        0xfc00ffff, 0x2000257f, 0                      , 0,
18141        0x0                 },        /* POOL32Axf_5_group0~*(18) */
18142     { reserved_block      , 0                   , 0   , 32,
18143        0xfc00ffff, 0x2000277f, 0                      , 0,
18144        0x0                 },        /* POOL32Axf_5_group0~*(19) */
18145     { reserved_block      , 0                   , 0   , 32,
18146        0xfc00ffff, 0x2000297f, 0                      , 0,
18147        0x0                 },        /* POOL32Axf_5_group0~*(20) */
18148     { reserved_block      , 0                   , 0   , 32,
18149        0xfc00ffff, 0x20002b7f, 0                      , 0,
18150        0x0                 },        /* POOL32Axf_5_group0~*(21) */
18151     { reserved_block      , 0                   , 0   , 32,
18152        0xfc00ffff, 0x20002d7f, 0                      , 0,
18153        0x0                 },        /* POOL32Axf_5_group0~*(22) */
18154     { reserved_block      , 0                   , 0   , 32,
18155        0xfc00ffff, 0x20002f7f, 0                      , 0,
18156        0x0                 },        /* POOL32Axf_5_group0~*(23) */
18157     { instruction         , 0                   , 0   , 32,
18158        0xfc00ffff, 0x2000317f, &TLBGWR           , 0,
18159        CP0_ | VZ_ | TLB_   },        /* TLBGWR */
18160     { instruction         , 0                   , 0   , 32,
18161        0xfc00ffff, 0x2000337f, &TLBWR            , 0,
18162        CP0_ | TLB_         },        /* TLBWR */
18163     { reserved_block      , 0                   , 0   , 32,
18164        0xfc00ffff, 0x2000357f, 0                      , 0,
18165        0x0                 },        /* POOL32Axf_5_group0~*(26) */
18166     { reserved_block      , 0                   , 0   , 32,
18167        0xfc00ffff, 0x2000377f, 0                      , 0,
18168        0x0                 },        /* POOL32Axf_5_group0~*(27) */
18169     { reserved_block      , 0                   , 0   , 32,
18170        0xfc00ffff, 0x2000397f, 0                      , 0,
18171        0x0                 },        /* POOL32Axf_5_group0~*(28) */
18172     { reserved_block      , 0                   , 0   , 32,
18173        0xfc00ffff, 0x20003b7f, 0                      , 0,
18174        0x0                 },        /* POOL32Axf_5_group0~*(29) */
18175     { reserved_block      , 0                   , 0   , 32,
18176        0xfc00ffff, 0x20003d7f, 0                      , 0,
18177        0x0                 },        /* POOL32Axf_5_group0~*(30) */
18178     { reserved_block      , 0                   , 0   , 32,
18179        0xfc00ffff, 0x20003f7f, 0                      , 0,
18180        0x0                 },        /* POOL32Axf_5_group0~*(31) */
18181 };
18182 
18183 
18184 static const Pool POOL32Axf_5_group1[32] = {
18185     { reserved_block      , 0                   , 0   , 32,
18186        0xfc00ffff, 0x2000417f, 0                      , 0,
18187        0x0                 },        /* POOL32Axf_5_group1~*(0) */
18188     { reserved_block      , 0                   , 0   , 32,
18189        0xfc00ffff, 0x2000437f, 0                      , 0,
18190        0x0                 },        /* POOL32Axf_5_group1~*(1) */
18191     { reserved_block      , 0                   , 0   , 32,
18192        0xfc00ffff, 0x2000457f, 0                      , 0,
18193        0x0                 },        /* POOL32Axf_5_group1~*(2) */
18194     { instruction         , 0                   , 0   , 32,
18195        0xfc00ffff, 0x2000477f, &DI               , 0,
18196        0x0                 },        /* DI */
18197     { reserved_block      , 0                   , 0   , 32,
18198        0xfc00ffff, 0x2000497f, 0                      , 0,
18199        0x0                 },        /* POOL32Axf_5_group1~*(4) */
18200     { reserved_block      , 0                   , 0   , 32,
18201        0xfc00ffff, 0x20004b7f, 0                      , 0,
18202        0x0                 },        /* POOL32Axf_5_group1~*(5) */
18203     { reserved_block      , 0                   , 0   , 32,
18204        0xfc00ffff, 0x20004d7f, 0                      , 0,
18205        0x0                 },        /* POOL32Axf_5_group1~*(6) */
18206     { reserved_block      , 0                   , 0   , 32,
18207        0xfc00ffff, 0x20004f7f, 0                      , 0,
18208        0x0                 },        /* POOL32Axf_5_group1~*(7) */
18209     { reserved_block      , 0                   , 0   , 32,
18210        0xfc00ffff, 0x2000517f, 0                      , 0,
18211        0x0                 },        /* POOL32Axf_5_group1~*(8) */
18212     { reserved_block      , 0                   , 0   , 32,
18213        0xfc00ffff, 0x2000537f, 0                      , 0,
18214        0x0                 },        /* POOL32Axf_5_group1~*(9) */
18215     { reserved_block      , 0                   , 0   , 32,
18216        0xfc00ffff, 0x2000557f, 0                      , 0,
18217        0x0                 },        /* POOL32Axf_5_group1~*(10) */
18218     { instruction         , 0                   , 0   , 32,
18219        0xfc00ffff, 0x2000577f, &EI               , 0,
18220        0x0                 },        /* EI */
18221     { reserved_block      , 0                   , 0   , 32,
18222        0xfc00ffff, 0x2000597f, 0                      , 0,
18223        0x0                 },        /* POOL32Axf_5_group1~*(12) */
18224     { reserved_block      , 0                   , 0   , 32,
18225        0xfc00ffff, 0x20005b7f, 0                      , 0,
18226        0x0                 },        /* POOL32Axf_5_group1~*(13) */
18227     { reserved_block      , 0                   , 0   , 32,
18228        0xfc00ffff, 0x20005d7f, 0                      , 0,
18229        0x0                 },        /* POOL32Axf_5_group1~*(14) */
18230     { reserved_block      , 0                   , 0   , 32,
18231        0xfc00ffff, 0x20005f7f, 0                      , 0,
18232        0x0                 },        /* POOL32Axf_5_group1~*(15) */
18233     { reserved_block      , 0                   , 0   , 32,
18234        0xfc00ffff, 0x2000617f, 0                      , 0,
18235        0x0                 },        /* POOL32Axf_5_group1~*(16) */
18236     { reserved_block      , 0                   , 0   , 32,
18237        0xfc00ffff, 0x2000637f, 0                      , 0,
18238        0x0                 },        /* POOL32Axf_5_group1~*(17) */
18239     { reserved_block      , 0                   , 0   , 32,
18240        0xfc00ffff, 0x2000657f, 0                      , 0,
18241        0x0                 },        /* POOL32Axf_5_group1~*(18) */
18242     { reserved_block      , 0                   , 0   , 32,
18243        0xfc00ffff, 0x2000677f, 0                      , 0,
18244        0x0                 },        /* POOL32Axf_5_group1~*(19) */
18245     { reserved_block      , 0                   , 0   , 32,
18246        0xfc00ffff, 0x2000697f, 0                      , 0,
18247        0x0                 },        /* POOL32Axf_5_group1~*(20) */
18248     { reserved_block      , 0                   , 0   , 32,
18249        0xfc00ffff, 0x20006b7f, 0                      , 0,
18250        0x0                 },        /* POOL32Axf_5_group1~*(21) */
18251     { reserved_block      , 0                   , 0   , 32,
18252        0xfc00ffff, 0x20006d7f, 0                      , 0,
18253        0x0                 },        /* POOL32Axf_5_group1~*(22) */
18254     { reserved_block      , 0                   , 0   , 32,
18255        0xfc00ffff, 0x20006f7f, 0                      , 0,
18256        0x0                 },        /* POOL32Axf_5_group1~*(23) */
18257     { reserved_block      , 0                   , 0   , 32,
18258        0xfc00ffff, 0x2000717f, 0                      , 0,
18259        0x0                 },        /* POOL32Axf_5_group1~*(24) */
18260     { reserved_block      , 0                   , 0   , 32,
18261        0xfc00ffff, 0x2000737f, 0                      , 0,
18262        0x0                 },        /* POOL32Axf_5_group1~*(25) */
18263     { reserved_block      , 0                   , 0   , 32,
18264        0xfc00ffff, 0x2000757f, 0                      , 0,
18265        0x0                 },        /* POOL32Axf_5_group1~*(26) */
18266     { reserved_block      , 0                   , 0   , 32,
18267        0xfc00ffff, 0x2000777f, 0                      , 0,
18268        0x0                 },        /* POOL32Axf_5_group1~*(27) */
18269     { reserved_block      , 0                   , 0   , 32,
18270        0xfc00ffff, 0x2000797f, 0                      , 0,
18271        0x0                 },        /* POOL32Axf_5_group1~*(28) */
18272     { reserved_block      , 0                   , 0   , 32,
18273        0xfc00ffff, 0x20007b7f, 0                      , 0,
18274        0x0                 },        /* POOL32Axf_5_group1~*(29) */
18275     { reserved_block      , 0                   , 0   , 32,
18276        0xfc00ffff, 0x20007d7f, 0                      , 0,
18277        0x0                 },        /* POOL32Axf_5_group1~*(30) */
18278     { reserved_block      , 0                   , 0   , 32,
18279        0xfc00ffff, 0x20007f7f, 0                      , 0,
18280        0x0                 },        /* POOL32Axf_5_group1~*(31) */
18281 };
18282 
18283 
18284 static const Pool ERETx[2] = {
18285     { instruction         , 0                   , 0   , 32,
18286        0xfc01ffff, 0x2000f37f, &ERET             , 0,
18287        0x0                 },        /* ERET */
18288     { instruction         , 0                   , 0   , 32,
18289        0xfc01ffff, 0x2001f37f, &ERETNC           , 0,
18290        0x0                 },        /* ERETNC */
18291 };
18292 
18293 
18294 static const Pool POOL32Axf_5_group3[32] = {
18295     { reserved_block      , 0                   , 0   , 32,
18296        0xfc00ffff, 0x2000c17f, 0                      , 0,
18297        0x0                 },        /* POOL32Axf_5_group3~*(0) */
18298     { instruction         , 0                   , 0   , 32,
18299        0xfc00ffff, 0x2000c37f, &WAIT             , 0,
18300        0x0                 },        /* WAIT */
18301     { reserved_block      , 0                   , 0   , 32,
18302        0xfc00ffff, 0x2000c57f, 0                      , 0,
18303        0x0                 },        /* POOL32Axf_5_group3~*(2) */
18304     { reserved_block      , 0                   , 0   , 32,
18305        0xfc00ffff, 0x2000c77f, 0                      , 0,
18306        0x0                 },        /* POOL32Axf_5_group3~*(3) */
18307     { reserved_block      , 0                   , 0   , 32,
18308        0xfc00ffff, 0x2000c97f, 0                      , 0,
18309        0x0                 },        /* POOL32Axf_5_group3~*(4) */
18310     { reserved_block      , 0                   , 0   , 32,
18311        0xfc00ffff, 0x2000cb7f, 0                      , 0,
18312        0x0                 },        /* POOL32Axf_5_group3~*(5) */
18313     { reserved_block      , 0                   , 0   , 32,
18314        0xfc00ffff, 0x2000cd7f, 0                      , 0,
18315        0x0                 },        /* POOL32Axf_5_group3~*(6) */
18316     { reserved_block      , 0                   , 0   , 32,
18317        0xfc00ffff, 0x2000cf7f, 0                      , 0,
18318        0x0                 },        /* POOL32Axf_5_group3~*(7) */
18319     { reserved_block      , 0                   , 0   , 32,
18320        0xfc00ffff, 0x2000d17f, 0                      , 0,
18321        0x0                 },        /* POOL32Axf_5_group3~*(8) */
18322     { instruction         , 0                   , 0   , 32,
18323        0xfc00ffff, 0x2000d37f, &IRET             , 0,
18324        MCU_                },        /* IRET */
18325     { reserved_block      , 0                   , 0   , 32,
18326        0xfc00ffff, 0x2000d57f, 0                      , 0,
18327        0x0                 },        /* POOL32Axf_5_group3~*(10) */
18328     { reserved_block      , 0                   , 0   , 32,
18329        0xfc00ffff, 0x2000d77f, 0                      , 0,
18330        0x0                 },        /* POOL32Axf_5_group3~*(11) */
18331     { reserved_block      , 0                   , 0   , 32,
18332        0xfc00ffff, 0x2000d97f, 0                      , 0,
18333        0x0                 },        /* POOL32Axf_5_group3~*(12) */
18334     { reserved_block      , 0                   , 0   , 32,
18335        0xfc00ffff, 0x2000db7f, 0                      , 0,
18336        0x0                 },        /* POOL32Axf_5_group3~*(13) */
18337     { reserved_block      , 0                   , 0   , 32,
18338        0xfc00ffff, 0x2000dd7f, 0                      , 0,
18339        0x0                 },        /* POOL32Axf_5_group3~*(14) */
18340     { reserved_block      , 0                   , 0   , 32,
18341        0xfc00ffff, 0x2000df7f, 0                      , 0,
18342        0x0                 },        /* POOL32Axf_5_group3~*(15) */
18343     { instruction         , 0                   , 0   , 32,
18344        0xfc00ffff, 0x2000e17f, &RDPGPR           , 0,
18345        CP0_                },        /* RDPGPR */
18346     { instruction         , 0                   , 0   , 32,
18347        0xfc00ffff, 0x2000e37f, &DERET            , 0,
18348        EJTAG_              },        /* DERET */
18349     { reserved_block      , 0                   , 0   , 32,
18350        0xfc00ffff, 0x2000e57f, 0                      , 0,
18351        0x0                 },        /* POOL32Axf_5_group3~*(18) */
18352     { reserved_block      , 0                   , 0   , 32,
18353        0xfc00ffff, 0x2000e77f, 0                      , 0,
18354        0x0                 },        /* POOL32Axf_5_group3~*(19) */
18355     { reserved_block      , 0                   , 0   , 32,
18356        0xfc00ffff, 0x2000e97f, 0                      , 0,
18357        0x0                 },        /* POOL32Axf_5_group3~*(20) */
18358     { reserved_block      , 0                   , 0   , 32,
18359        0xfc00ffff, 0x2000eb7f, 0                      , 0,
18360        0x0                 },        /* POOL32Axf_5_group3~*(21) */
18361     { reserved_block      , 0                   , 0   , 32,
18362        0xfc00ffff, 0x2000ed7f, 0                      , 0,
18363        0x0                 },        /* POOL32Axf_5_group3~*(22) */
18364     { reserved_block      , 0                   , 0   , 32,
18365        0xfc00ffff, 0x2000ef7f, 0                      , 0,
18366        0x0                 },        /* POOL32Axf_5_group3~*(23) */
18367     { instruction         , 0                   , 0   , 32,
18368        0xfc00ffff, 0x2000f17f, &WRPGPR           , 0,
18369        CP0_                },        /* WRPGPR */
18370     { pool                , ERETx               , 2   , 32,
18371        0xfc00ffff, 0x2000f37f, 0                      , 0,
18372        0x0                 },        /* ERETx */
18373     { reserved_block      , 0                   , 0   , 32,
18374        0xfc00ffff, 0x2000f57f, 0                      , 0,
18375        0x0                 },        /* POOL32Axf_5_group3~*(26) */
18376     { reserved_block      , 0                   , 0   , 32,
18377        0xfc00ffff, 0x2000f77f, 0                      , 0,
18378        0x0                 },        /* POOL32Axf_5_group3~*(27) */
18379     { reserved_block      , 0                   , 0   , 32,
18380        0xfc00ffff, 0x2000f97f, 0                      , 0,
18381        0x0                 },        /* POOL32Axf_5_group3~*(28) */
18382     { reserved_block      , 0                   , 0   , 32,
18383        0xfc00ffff, 0x2000fb7f, 0                      , 0,
18384        0x0                 },        /* POOL32Axf_5_group3~*(29) */
18385     { reserved_block      , 0                   , 0   , 32,
18386        0xfc00ffff, 0x2000fd7f, 0                      , 0,
18387        0x0                 },        /* POOL32Axf_5_group3~*(30) */
18388     { reserved_block      , 0                   , 0   , 32,
18389        0xfc00ffff, 0x2000ff7f, 0                      , 0,
18390        0x0                 },        /* POOL32Axf_5_group3~*(31) */
18391 };
18392 
18393 
18394 static const Pool POOL32Axf_5[4] = {
18395     { pool                , POOL32Axf_5_group0  , 32  , 32,
18396        0xfc00c1ff, 0x2000017f, 0                      , 0,
18397        0x0                 },        /* POOL32Axf_5_group0 */
18398     { pool                , POOL32Axf_5_group1  , 32  , 32,
18399        0xfc00c1ff, 0x2000417f, 0                      , 0,
18400        0x0                 },        /* POOL32Axf_5_group1 */
18401     { reserved_block      , 0                   , 0   , 32,
18402        0xfc00c1ff, 0x2000817f, 0                      , 0,
18403        0x0                 },        /* POOL32Axf_5~*(2) */
18404     { pool                , POOL32Axf_5_group3  , 32  , 32,
18405        0xfc00c1ff, 0x2000c17f, 0                      , 0,
18406        0x0                 },        /* POOL32Axf_5_group3 */
18407 };
18408 
18409 
18410 static const Pool SHRA__R__QB[2] = {
18411     { instruction         , 0                   , 0   , 32,
18412        0xfc001fff, 0x200001ff, &SHRA_QB          , 0,
18413        DSP_                },        /* SHRA.QB */
18414     { instruction         , 0                   , 0   , 32,
18415        0xfc001fff, 0x200011ff, &SHRA_R_QB        , 0,
18416        DSP_                },        /* SHRA_R.QB */
18417 };
18418 
18419 
18420 static const Pool POOL32Axf_7[8] = {
18421     { pool                , SHRA__R__QB         , 2   , 32,
18422        0xfc000fff, 0x200001ff, 0                      , 0,
18423        0x0                 },        /* SHRA[_R].QB */
18424     { instruction         , 0                   , 0   , 32,
18425        0xfc000fff, 0x200003ff, &SHRL_PH          , 0,
18426        DSP_                },        /* SHRL.PH */
18427     { instruction         , 0                   , 0   , 32,
18428        0xfc000fff, 0x200005ff, &REPL_QB          , 0,
18429        DSP_                },        /* REPL.QB */
18430     { reserved_block      , 0                   , 0   , 32,
18431        0xfc000fff, 0x200007ff, 0                      , 0,
18432        0x0                 },        /* POOL32Axf_7~*(3) */
18433     { reserved_block      , 0                   , 0   , 32,
18434        0xfc000fff, 0x200009ff, 0                      , 0,
18435        0x0                 },        /* POOL32Axf_7~*(4) */
18436     { reserved_block      , 0                   , 0   , 32,
18437        0xfc000fff, 0x20000bff, 0                      , 0,
18438        0x0                 },        /* POOL32Axf_7~*(5) */
18439     { reserved_block      , 0                   , 0   , 32,
18440        0xfc000fff, 0x20000dff, 0                      , 0,
18441        0x0                 },        /* POOL32Axf_7~*(6) */
18442     { reserved_block      , 0                   , 0   , 32,
18443        0xfc000fff, 0x20000fff, 0                      , 0,
18444        0x0                 },        /* POOL32Axf_7~*(7) */
18445 };
18446 
18447 
18448 static const Pool POOL32Axf[8] = {
18449     { reserved_block      , 0                   , 0   , 32,
18450        0xfc0001ff, 0x2000003f, 0                      , 0,
18451        0x0                 },        /* POOL32Axf~*(0) */
18452     { pool                , POOL32Axf_1         , 8   , 32,
18453        0xfc0001ff, 0x2000007f, 0                      , 0,
18454        0x0                 },        /* POOL32Axf_1 */
18455     { pool                , POOL32Axf_2         , 4   , 32,
18456        0xfc0001ff, 0x200000bf, 0                      , 0,
18457        0x0                 },        /* POOL32Axf_2 */
18458     { reserved_block      , 0                   , 0   , 32,
18459        0xfc0001ff, 0x200000ff, 0                      , 0,
18460        0x0                 },        /* POOL32Axf~*(3) */
18461     { pool                , POOL32Axf_4         , 128 , 32,
18462        0xfc0001ff, 0x2000013f, 0                      , 0,
18463        0x0                 },        /* POOL32Axf_4 */
18464     { pool                , POOL32Axf_5         , 4   , 32,
18465        0xfc0001ff, 0x2000017f, 0                      , 0,
18466        0x0                 },        /* POOL32Axf_5 */
18467     { reserved_block      , 0                   , 0   , 32,
18468        0xfc0001ff, 0x200001bf, 0                      , 0,
18469        0x0                 },        /* POOL32Axf~*(6) */
18470     { pool                , POOL32Axf_7         , 8   , 32,
18471        0xfc0001ff, 0x200001ff, 0                      , 0,
18472        0x0                 },        /* POOL32Axf_7 */
18473 };
18474 
18475 
18476 static const Pool _POOL32A7[8] = {
18477     { pool                , P_LSX               , 2   , 32,
18478        0xfc00003f, 0x20000007, 0                      , 0,
18479        0x0                 },        /* P.LSX */
18480     { instruction         , 0                   , 0   , 32,
18481        0xfc00003f, 0x2000000f, &LSA              , 0,
18482        0x0                 },        /* LSA */
18483     { reserved_block      , 0                   , 0   , 32,
18484        0xfc00003f, 0x20000017, 0                      , 0,
18485        0x0                 },        /* _POOL32A7~*(2) */
18486     { instruction         , 0                   , 0   , 32,
18487        0xfc00003f, 0x2000001f, &EXTW             , 0,
18488        0x0                 },        /* EXTW */
18489     { reserved_block      , 0                   , 0   , 32,
18490        0xfc00003f, 0x20000027, 0                      , 0,
18491        0x0                 },        /* _POOL32A7~*(4) */
18492     { reserved_block      , 0                   , 0   , 32,
18493        0xfc00003f, 0x2000002f, 0                      , 0,
18494        0x0                 },        /* _POOL32A7~*(5) */
18495     { reserved_block      , 0                   , 0   , 32,
18496        0xfc00003f, 0x20000037, 0                      , 0,
18497        0x0                 },        /* _POOL32A7~*(6) */
18498     { pool                , POOL32Axf           , 8   , 32,
18499        0xfc00003f, 0x2000003f, 0                      , 0,
18500        0x0                 },        /* POOL32Axf */
18501 };
18502 
18503 
18504 static const Pool P32A[8] = {
18505     { pool                , _POOL32A0           , 128 , 32,
18506        0xfc000007, 0x20000000, 0                      , 0,
18507        0x0                 },        /* _POOL32A0 */
18508     { instruction         , 0                   , 0   , 32,
18509        0xfc000007, 0x20000001, &SPECIAL2         , 0,
18510        UDI_                },        /* SPECIAL2 */
18511     { instruction         , 0                   , 0   , 32,
18512        0xfc000007, 0x20000002, &COP2_1           , 0,
18513        CP2_                },        /* COP2_1 */
18514     { instruction         , 0                   , 0   , 32,
18515        0xfc000007, 0x20000003, &UDI              , 0,
18516        UDI_                },        /* UDI */
18517     { reserved_block      , 0                   , 0   , 32,
18518        0xfc000007, 0x20000004, 0                      , 0,
18519        0x0                 },        /* P32A~*(4) */
18520     { pool                , _POOL32A5           , 128 , 32,
18521        0xfc000007, 0x20000005, 0                      , 0,
18522        0x0                 },        /* _POOL32A5 */
18523     { reserved_block      , 0                   , 0   , 32,
18524        0xfc000007, 0x20000006, 0                      , 0,
18525        0x0                 },        /* P32A~*(6) */
18526     { pool                , _POOL32A7           , 8   , 32,
18527        0xfc000007, 0x20000007, 0                      , 0,
18528        0x0                 },        /* _POOL32A7 */
18529 };
18530 
18531 
18532 static const Pool P_GP_D[2] = {
18533     { instruction         , 0                   , 0   , 32,
18534        0xfc000007, 0x40000001, &LD_GP_           , 0,
18535        MIPS64_             },        /* LD[GP] */
18536     { instruction         , 0                   , 0   , 32,
18537        0xfc000007, 0x40000005, &SD_GP_           , 0,
18538        MIPS64_             },        /* SD[GP] */
18539 };
18540 
18541 
18542 static const Pool P_GP_W[4] = {
18543     { instruction         , 0                   , 0   , 32,
18544        0xfc000003, 0x40000000, &ADDIU_GP_W_      , 0,
18545        0x0                 },        /* ADDIU[GP.W] */
18546     { pool                , P_GP_D              , 2   , 32,
18547        0xfc000003, 0x40000001, 0                      , 0,
18548        0x0                 },        /* P.GP.D */
18549     { instruction         , 0                   , 0   , 32,
18550        0xfc000003, 0x40000002, &LW_GP_           , 0,
18551        0x0                 },        /* LW[GP] */
18552     { instruction         , 0                   , 0   , 32,
18553        0xfc000003, 0x40000003, &SW_GP_           , 0,
18554        0x0                 },        /* SW[GP] */
18555 };
18556 
18557 
18558 static const Pool POOL48I[32] = {
18559     { instruction         , 0                   , 0   , 48,
18560        0xfc1f00000000ull, 0x600000000000ull, &LI_48_           , 0,
18561        XMMS_               },        /* LI[48] */
18562     { instruction         , 0                   , 0   , 48,
18563        0xfc1f00000000ull, 0x600100000000ull, &ADDIU_48_        , 0,
18564        XMMS_               },        /* ADDIU[48] */
18565     { instruction         , 0                   , 0   , 48,
18566        0xfc1f00000000ull, 0x600200000000ull, &ADDIU_GP48_      , 0,
18567        XMMS_               },        /* ADDIU[GP48] */
18568     { instruction         , 0                   , 0   , 48,
18569        0xfc1f00000000ull, 0x600300000000ull, &ADDIUPC_48_      , 0,
18570        XMMS_               },        /* ADDIUPC[48] */
18571     { reserved_block      , 0                   , 0   , 48,
18572        0xfc1f00000000ull, 0x600400000000ull, 0                      , 0,
18573        0x0                 },        /* POOL48I~*(4) */
18574     { reserved_block      , 0                   , 0   , 48,
18575        0xfc1f00000000ull, 0x600500000000ull, 0                      , 0,
18576        0x0                 },        /* POOL48I~*(5) */
18577     { reserved_block      , 0                   , 0   , 48,
18578        0xfc1f00000000ull, 0x600600000000ull, 0                      , 0,
18579        0x0                 },        /* POOL48I~*(6) */
18580     { reserved_block      , 0                   , 0   , 48,
18581        0xfc1f00000000ull, 0x600700000000ull, 0                      , 0,
18582        0x0                 },        /* POOL48I~*(7) */
18583     { reserved_block      , 0                   , 0   , 48,
18584        0xfc1f00000000ull, 0x600800000000ull, 0                      , 0,
18585        0x0                 },        /* POOL48I~*(8) */
18586     { reserved_block      , 0                   , 0   , 48,
18587        0xfc1f00000000ull, 0x600900000000ull, 0                      , 0,
18588        0x0                 },        /* POOL48I~*(9) */
18589     { reserved_block      , 0                   , 0   , 48,
18590        0xfc1f00000000ull, 0x600a00000000ull, 0                      , 0,
18591        0x0                 },        /* POOL48I~*(10) */
18592     { instruction         , 0                   , 0   , 48,
18593        0xfc1f00000000ull, 0x600b00000000ull, &LWPC_48_         , 0,
18594        XMMS_               },        /* LWPC[48] */
18595     { reserved_block      , 0                   , 0   , 48,
18596        0xfc1f00000000ull, 0x600c00000000ull, 0                      , 0,
18597        0x0                 },        /* POOL48I~*(12) */
18598     { reserved_block      , 0                   , 0   , 48,
18599        0xfc1f00000000ull, 0x600d00000000ull, 0                      , 0,
18600        0x0                 },        /* POOL48I~*(13) */
18601     { reserved_block      , 0                   , 0   , 48,
18602        0xfc1f00000000ull, 0x600e00000000ull, 0                      , 0,
18603        0x0                 },        /* POOL48I~*(14) */
18604     { instruction         , 0                   , 0   , 48,
18605        0xfc1f00000000ull, 0x600f00000000ull, &SWPC_48_         , 0,
18606        XMMS_               },        /* SWPC[48] */
18607     { reserved_block      , 0                   , 0   , 48,
18608        0xfc1f00000000ull, 0x601000000000ull, 0                      , 0,
18609        0x0                 },        /* POOL48I~*(16) */
18610     { instruction         , 0                   , 0   , 48,
18611        0xfc1f00000000ull, 0x601100000000ull, &DADDIU_48_       , 0,
18612        MIPS64_             },        /* DADDIU[48] */
18613     { reserved_block      , 0                   , 0   , 48,
18614        0xfc1f00000000ull, 0x601200000000ull, 0                      , 0,
18615        0x0                 },        /* POOL48I~*(18) */
18616     { reserved_block      , 0                   , 0   , 48,
18617        0xfc1f00000000ull, 0x601300000000ull, 0                      , 0,
18618        0x0                 },        /* POOL48I~*(19) */
18619     { instruction         , 0                   , 0   , 48,
18620        0xfc1f00000000ull, 0x601400000000ull, &DLUI_48_         , 0,
18621        MIPS64_             },        /* DLUI[48] */
18622     { reserved_block      , 0                   , 0   , 48,
18623        0xfc1f00000000ull, 0x601500000000ull, 0                      , 0,
18624        0x0                 },        /* POOL48I~*(21) */
18625     { reserved_block      , 0                   , 0   , 48,
18626        0xfc1f00000000ull, 0x601600000000ull, 0                      , 0,
18627        0x0                 },        /* POOL48I~*(22) */
18628     { reserved_block      , 0                   , 0   , 48,
18629        0xfc1f00000000ull, 0x601700000000ull, 0                      , 0,
18630        0x0                 },        /* POOL48I~*(23) */
18631     { reserved_block      , 0                   , 0   , 48,
18632        0xfc1f00000000ull, 0x601800000000ull, 0                      , 0,
18633        0x0                 },        /* POOL48I~*(24) */
18634     { reserved_block      , 0                   , 0   , 48,
18635        0xfc1f00000000ull, 0x601900000000ull, 0                      , 0,
18636        0x0                 },        /* POOL48I~*(25) */
18637     { reserved_block      , 0                   , 0   , 48,
18638        0xfc1f00000000ull, 0x601a00000000ull, 0                      , 0,
18639        0x0                 },        /* POOL48I~*(26) */
18640     { instruction         , 0                   , 0   , 48,
18641        0xfc1f00000000ull, 0x601b00000000ull, &LDPC_48_         , 0,
18642        MIPS64_             },        /* LDPC[48] */
18643     { reserved_block      , 0                   , 0   , 48,
18644        0xfc1f00000000ull, 0x601c00000000ull, 0                      , 0,
18645        0x0                 },        /* POOL48I~*(28) */
18646     { reserved_block      , 0                   , 0   , 48,
18647        0xfc1f00000000ull, 0x601d00000000ull, 0                      , 0,
18648        0x0                 },        /* POOL48I~*(29) */
18649     { reserved_block      , 0                   , 0   , 48,
18650        0xfc1f00000000ull, 0x601e00000000ull, 0                      , 0,
18651        0x0                 },        /* POOL48I~*(30) */
18652     { instruction         , 0                   , 0   , 48,
18653        0xfc1f00000000ull, 0x601f00000000ull, &SDPC_48_         , 0,
18654        MIPS64_             },        /* SDPC[48] */
18655 };
18656 
18657 
18658 static const Pool PP_SR[4] = {
18659     { instruction         , 0                   , 0   , 32,
18660        0xfc10f003, 0x80003000, &SAVE_32_         , 0,
18661        0x0                 },        /* SAVE[32] */
18662     { reserved_block      , 0                   , 0   , 32,
18663        0xfc10f003, 0x80003001, 0                      , 0,
18664        0x0                 },        /* PP.SR~*(1) */
18665     { instruction         , 0                   , 0   , 32,
18666        0xfc10f003, 0x80003002, &RESTORE_32_      , 0,
18667        0x0                 },        /* RESTORE[32] */
18668     { return_instruction  , 0                   , 0   , 32,
18669        0xfc10f003, 0x80003003, &RESTORE_JRC_32_  , 0,
18670        0x0                 },        /* RESTORE.JRC[32] */
18671 };
18672 
18673 
18674 static const Pool P_SR_F[8] = {
18675     { instruction         , 0                   , 0   , 32,
18676        0xfc10f007, 0x80103000, &SAVEF            , 0,
18677        CP1_                },        /* SAVEF */
18678     { instruction         , 0                   , 0   , 32,
18679        0xfc10f007, 0x80103001, &RESTOREF         , 0,
18680        CP1_                },        /* RESTOREF */
18681     { reserved_block      , 0                   , 0   , 32,
18682        0xfc10f007, 0x80103002, 0                      , 0,
18683        0x0                 },        /* P.SR.F~*(2) */
18684     { reserved_block      , 0                   , 0   , 32,
18685        0xfc10f007, 0x80103003, 0                      , 0,
18686        0x0                 },        /* P.SR.F~*(3) */
18687     { reserved_block      , 0                   , 0   , 32,
18688        0xfc10f007, 0x80103004, 0                      , 0,
18689        0x0                 },        /* P.SR.F~*(4) */
18690     { reserved_block      , 0                   , 0   , 32,
18691        0xfc10f007, 0x80103005, 0                      , 0,
18692        0x0                 },        /* P.SR.F~*(5) */
18693     { reserved_block      , 0                   , 0   , 32,
18694        0xfc10f007, 0x80103006, 0                      , 0,
18695        0x0                 },        /* P.SR.F~*(6) */
18696     { reserved_block      , 0                   , 0   , 32,
18697        0xfc10f007, 0x80103007, 0                      , 0,
18698        0x0                 },        /* P.SR.F~*(7) */
18699 };
18700 
18701 
18702 static const Pool P_SR[2] = {
18703     { pool                , PP_SR               , 4   , 32,
18704        0xfc10f000, 0x80003000, 0                      , 0,
18705        0x0                 },        /* PP.SR */
18706     { pool                , P_SR_F              , 8   , 32,
18707        0xfc10f000, 0x80103000, 0                      , 0,
18708        0x0                 },        /* P.SR.F */
18709 };
18710 
18711 
18712 static const Pool P_SLL[5] = {
18713     { instruction         , 0                   , 0   , 32,
18714        0xffe0f1ff, 0x8000c000, &NOP_32_          , 0,
18715        0x0                 },        /* NOP[32] */
18716     { instruction         , 0                   , 0   , 32,
18717        0xffe0f1ff, 0x8000c003, &EHB              , 0,
18718        0x0                 },        /* EHB */
18719     { instruction         , 0                   , 0   , 32,
18720        0xffe0f1ff, 0x8000c005, &PAUSE            , 0,
18721        0x0                 },        /* PAUSE */
18722     { instruction         , 0                   , 0   , 32,
18723        0xffe0f1ff, 0x8000c006, &SYNC             , 0,
18724        0x0                 },        /* SYNC */
18725     { instruction         , 0                   , 0   , 32,
18726        0xfc00f1e0, 0x8000c000, &SLL_32_          , 0,
18727        0x0                 },        /* SLL[32] */
18728 };
18729 
18730 
18731 static const Pool P_SHIFT[16] = {
18732     { pool                , P_SLL               , 5   , 32,
18733        0xfc00f1e0, 0x8000c000, 0                      , 0,
18734        0x0                 },        /* P.SLL */
18735     { reserved_block      , 0                   , 0   , 32,
18736        0xfc00f1e0, 0x8000c020, 0                      , 0,
18737        0x0                 },        /* P.SHIFT~*(1) */
18738     { instruction         , 0                   , 0   , 32,
18739        0xfc00f1e0, 0x8000c040, &SRL_32_          , 0,
18740        0x0                 },        /* SRL[32] */
18741     { reserved_block      , 0                   , 0   , 32,
18742        0xfc00f1e0, 0x8000c060, 0                      , 0,
18743        0x0                 },        /* P.SHIFT~*(3) */
18744     { instruction         , 0                   , 0   , 32,
18745        0xfc00f1e0, 0x8000c080, &SRA              , 0,
18746        0x0                 },        /* SRA */
18747     { reserved_block      , 0                   , 0   , 32,
18748        0xfc00f1e0, 0x8000c0a0, 0                      , 0,
18749        0x0                 },        /* P.SHIFT~*(5) */
18750     { instruction         , 0                   , 0   , 32,
18751        0xfc00f1e0, 0x8000c0c0, &ROTR             , 0,
18752        0x0                 },        /* ROTR */
18753     { reserved_block      , 0                   , 0   , 32,
18754        0xfc00f1e0, 0x8000c0e0, 0                      , 0,
18755        0x0                 },        /* P.SHIFT~*(7) */
18756     { instruction         , 0                   , 0   , 32,
18757        0xfc00f1e0, 0x8000c100, &DSLL             , 0,
18758        MIPS64_             },        /* DSLL */
18759     { instruction         , 0                   , 0   , 32,
18760        0xfc00f1e0, 0x8000c120, &DSLL32           , 0,
18761        MIPS64_             },        /* DSLL32 */
18762     { instruction         , 0                   , 0   , 32,
18763        0xfc00f1e0, 0x8000c140, &DSRL             , 0,
18764        MIPS64_             },        /* DSRL */
18765     { instruction         , 0                   , 0   , 32,
18766        0xfc00f1e0, 0x8000c160, &DSRL32           , 0,
18767        MIPS64_             },        /* DSRL32 */
18768     { instruction         , 0                   , 0   , 32,
18769        0xfc00f1e0, 0x8000c180, &DSRA             , 0,
18770        MIPS64_             },        /* DSRA */
18771     { instruction         , 0                   , 0   , 32,
18772        0xfc00f1e0, 0x8000c1a0, &DSRA32           , 0,
18773        MIPS64_             },        /* DSRA32 */
18774     { instruction         , 0                   , 0   , 32,
18775        0xfc00f1e0, 0x8000c1c0, &DROTR            , 0,
18776        MIPS64_             },        /* DROTR */
18777     { instruction         , 0                   , 0   , 32,
18778        0xfc00f1e0, 0x8000c1e0, &DROTR32          , 0,
18779        MIPS64_             },        /* DROTR32 */
18780 };
18781 
18782 
18783 static const Pool P_ROTX[4] = {
18784     { instruction         , 0                   , 0   , 32,
18785        0xfc00f820, 0x8000d000, &ROTX             , 0,
18786        XMMS_               },        /* ROTX */
18787     { reserved_block      , 0                   , 0   , 32,
18788        0xfc00f820, 0x8000d020, 0                      , 0,
18789        0x0                 },        /* P.ROTX~*(1) */
18790     { reserved_block      , 0                   , 0   , 32,
18791        0xfc00f820, 0x8000d800, 0                      , 0,
18792        0x0                 },        /* P.ROTX~*(2) */
18793     { reserved_block      , 0                   , 0   , 32,
18794        0xfc00f820, 0x8000d820, 0                      , 0,
18795        0x0                 },        /* P.ROTX~*(3) */
18796 };
18797 
18798 
18799 static const Pool P_INS[4] = {
18800     { instruction         , 0                   , 0   , 32,
18801        0xfc00f820, 0x8000e000, &INS              , 0,
18802        XMMS_               },        /* INS */
18803     { instruction         , 0                   , 0   , 32,
18804        0xfc00f820, 0x8000e020, &DINSU            , 0,
18805        MIPS64_             },        /* DINSU */
18806     { instruction         , 0                   , 0   , 32,
18807        0xfc00f820, 0x8000e800, &DINSM            , 0,
18808        MIPS64_             },        /* DINSM */
18809     { instruction         , 0                   , 0   , 32,
18810        0xfc00f820, 0x8000e820, &DINS             , 0,
18811        MIPS64_             },        /* DINS */
18812 };
18813 
18814 
18815 static const Pool P_EXT[4] = {
18816     { instruction         , 0                   , 0   , 32,
18817        0xfc00f820, 0x8000f000, &EXT              , 0,
18818        XMMS_               },        /* EXT */
18819     { instruction         , 0                   , 0   , 32,
18820        0xfc00f820, 0x8000f020, &DEXTU            , 0,
18821        MIPS64_             },        /* DEXTU */
18822     { instruction         , 0                   , 0   , 32,
18823        0xfc00f820, 0x8000f800, &DEXTM            , 0,
18824        MIPS64_             },        /* DEXTM */
18825     { instruction         , 0                   , 0   , 32,
18826        0xfc00f820, 0x8000f820, &DEXT             , 0,
18827        MIPS64_             },        /* DEXT */
18828 };
18829 
18830 
18831 static const Pool P_U12[16] = {
18832     { instruction         , 0                   , 0   , 32,
18833        0xfc00f000, 0x80000000, &ORI              , 0,
18834        0x0                 },        /* ORI */
18835     { instruction         , 0                   , 0   , 32,
18836        0xfc00f000, 0x80001000, &XORI             , 0,
18837        0x0                 },        /* XORI */
18838     { instruction         , 0                   , 0   , 32,
18839        0xfc00f000, 0x80002000, &ANDI_32_         , 0,
18840        0x0                 },        /* ANDI[32] */
18841     { pool                , P_SR                , 2   , 32,
18842        0xfc00f000, 0x80003000, 0                      , 0,
18843        0x0                 },        /* P.SR */
18844     { instruction         , 0                   , 0   , 32,
18845        0xfc00f000, 0x80004000, &SLTI             , 0,
18846        0x0                 },        /* SLTI */
18847     { instruction         , 0                   , 0   , 32,
18848        0xfc00f000, 0x80005000, &SLTIU            , 0,
18849        0x0                 },        /* SLTIU */
18850     { instruction         , 0                   , 0   , 32,
18851        0xfc00f000, 0x80006000, &SEQI             , 0,
18852        0x0                 },        /* SEQI */
18853     { reserved_block      , 0                   , 0   , 32,
18854        0xfc00f000, 0x80007000, 0                      , 0,
18855        0x0                 },        /* P.U12~*(7) */
18856     { instruction         , 0                   , 0   , 32,
18857        0xfc00f000, 0x80008000, &ADDIU_NEG_       , 0,
18858        0x0                 },        /* ADDIU[NEG] */
18859     { instruction         , 0                   , 0   , 32,
18860        0xfc00f000, 0x80009000, &DADDIU_U12_      , 0,
18861        MIPS64_             },        /* DADDIU[U12] */
18862     { instruction         , 0                   , 0   , 32,
18863        0xfc00f000, 0x8000a000, &DADDIU_NEG_      , 0,
18864        MIPS64_             },        /* DADDIU[NEG] */
18865     { instruction         , 0                   , 0   , 32,
18866        0xfc00f000, 0x8000b000, &DROTX            , 0,
18867        MIPS64_             },        /* DROTX */
18868     { pool                , P_SHIFT             , 16  , 32,
18869        0xfc00f000, 0x8000c000, 0                      , 0,
18870        0x0                 },        /* P.SHIFT */
18871     { pool                , P_ROTX              , 4   , 32,
18872        0xfc00f000, 0x8000d000, 0                      , 0,
18873        0x0                 },        /* P.ROTX */
18874     { pool                , P_INS               , 4   , 32,
18875        0xfc00f000, 0x8000e000, 0                      , 0,
18876        0x0                 },        /* P.INS */
18877     { pool                , P_EXT               , 4   , 32,
18878        0xfc00f000, 0x8000f000, 0                      , 0,
18879        0x0                 },        /* P.EXT */
18880 };
18881 
18882 
18883 static const Pool RINT_fmt[2] = {
18884     { instruction         , 0                   , 0   , 32,
18885        0xfc0003ff, 0xa0000020, &RINT_S           , 0,
18886        CP1_                },        /* RINT.S */
18887     { instruction         , 0                   , 0   , 32,
18888        0xfc0003ff, 0xa0000220, &RINT_D           , 0,
18889        CP1_                },        /* RINT.D */
18890 };
18891 
18892 
18893 static const Pool ADD_fmt0[2] = {
18894     { instruction         , 0                   , 0   , 32,
18895        0xfc0003ff, 0xa0000030, &ADD_S            , 0,
18896        CP1_                },        /* ADD.S */
18897     { reserved_block      , 0                   , 0   , 32,
18898        0xfc0003ff, 0xa0000230, 0                      , 0,
18899        CP1_                },        /* ADD.fmt0~*(1) */
18900 };
18901 
18902 
18903 static const Pool SELEQZ_fmt[2] = {
18904     { instruction         , 0                   , 0   , 32,
18905        0xfc0003ff, 0xa0000038, &SELEQZ_S         , 0,
18906        CP1_                },        /* SELEQZ.S */
18907     { instruction         , 0                   , 0   , 32,
18908        0xfc0003ff, 0xa0000238, &SELEQZ_D         , 0,
18909        CP1_                },        /* SELEQZ.D */
18910 };
18911 
18912 
18913 static const Pool CLASS_fmt[2] = {
18914     { instruction         , 0                   , 0   , 32,
18915        0xfc0003ff, 0xa0000060, &CLASS_S          , 0,
18916        CP1_                },        /* CLASS.S */
18917     { instruction         , 0                   , 0   , 32,
18918        0xfc0003ff, 0xa0000260, &CLASS_D          , 0,
18919        CP1_                },        /* CLASS.D */
18920 };
18921 
18922 
18923 static const Pool SUB_fmt0[2] = {
18924     { instruction         , 0                   , 0   , 32,
18925        0xfc0003ff, 0xa0000070, &SUB_S            , 0,
18926        CP1_                },        /* SUB.S */
18927     { reserved_block      , 0                   , 0   , 32,
18928        0xfc0003ff, 0xa0000270, 0                      , 0,
18929        CP1_                },        /* SUB.fmt0~*(1) */
18930 };
18931 
18932 
18933 static const Pool SELNEZ_fmt[2] = {
18934     { instruction         , 0                   , 0   , 32,
18935        0xfc0003ff, 0xa0000078, &SELNEZ_S         , 0,
18936        CP1_                },        /* SELNEZ.S */
18937     { instruction         , 0                   , 0   , 32,
18938        0xfc0003ff, 0xa0000278, &SELNEZ_D         , 0,
18939        CP1_                },        /* SELNEZ.D */
18940 };
18941 
18942 
18943 static const Pool MUL_fmt0[2] = {
18944     { instruction         , 0                   , 0   , 32,
18945        0xfc0003ff, 0xa00000b0, &MUL_S            , 0,
18946        CP1_                },        /* MUL.S */
18947     { reserved_block      , 0                   , 0   , 32,
18948        0xfc0003ff, 0xa00002b0, 0                      , 0,
18949        CP1_                },        /* MUL.fmt0~*(1) */
18950 };
18951 
18952 
18953 static const Pool SEL_fmt[2] = {
18954     { instruction         , 0                   , 0   , 32,
18955        0xfc0003ff, 0xa00000b8, &SEL_S            , 0,
18956        CP1_                },        /* SEL.S */
18957     { instruction         , 0                   , 0   , 32,
18958        0xfc0003ff, 0xa00002b8, &SEL_D            , 0,
18959        CP1_                },        /* SEL.D */
18960 };
18961 
18962 
18963 static const Pool DIV_fmt0[2] = {
18964     { instruction         , 0                   , 0   , 32,
18965        0xfc0003ff, 0xa00000f0, &DIV_S            , 0,
18966        CP1_                },        /* DIV.S */
18967     { reserved_block      , 0                   , 0   , 32,
18968        0xfc0003ff, 0xa00002f0, 0                      , 0,
18969        CP1_                },        /* DIV.fmt0~*(1) */
18970 };
18971 
18972 
18973 static const Pool ADD_fmt1[2] = {
18974     { instruction         , 0                   , 0   , 32,
18975        0xfc0003ff, 0xa0000130, &ADD_D            , 0,
18976        CP1_                },        /* ADD.D */
18977     { reserved_block      , 0                   , 0   , 32,
18978        0xfc0003ff, 0xa0000330, 0                      , 0,
18979        CP1_                },        /* ADD.fmt1~*(1) */
18980 };
18981 
18982 
18983 static const Pool SUB_fmt1[2] = {
18984     { instruction         , 0                   , 0   , 32,
18985        0xfc0003ff, 0xa0000170, &SUB_D            , 0,
18986        CP1_                },        /* SUB.D */
18987     { reserved_block      , 0                   , 0   , 32,
18988        0xfc0003ff, 0xa0000370, 0                      , 0,
18989        CP1_                },        /* SUB.fmt1~*(1) */
18990 };
18991 
18992 
18993 static const Pool MUL_fmt1[2] = {
18994     { instruction         , 0                   , 0   , 32,
18995        0xfc0003ff, 0xa00001b0, &MUL_D            , 0,
18996        CP1_                },        /* MUL.D */
18997     { reserved_block      , 0                   , 0   , 32,
18998        0xfc0003ff, 0xa00003b0, 0                      , 0,
18999        CP1_                },        /* MUL.fmt1~*(1) */
19000 };
19001 
19002 
19003 static const Pool MADDF_fmt[2] = {
19004     { instruction         , 0                   , 0   , 32,
19005        0xfc0003ff, 0xa00001b8, &MADDF_S          , 0,
19006        CP1_                },        /* MADDF.S */
19007     { instruction         , 0                   , 0   , 32,
19008        0xfc0003ff, 0xa00003b8, &MADDF_D          , 0,
19009        CP1_                },        /* MADDF.D */
19010 };
19011 
19012 
19013 static const Pool DIV_fmt1[2] = {
19014     { instruction         , 0                   , 0   , 32,
19015        0xfc0003ff, 0xa00001f0, &DIV_D            , 0,
19016        CP1_                },        /* DIV.D */
19017     { reserved_block      , 0                   , 0   , 32,
19018        0xfc0003ff, 0xa00003f0, 0                      , 0,
19019        CP1_                },        /* DIV.fmt1~*(1) */
19020 };
19021 
19022 
19023 static const Pool MSUBF_fmt[2] = {
19024     { instruction         , 0                   , 0   , 32,
19025        0xfc0003ff, 0xa00001f8, &MSUBF_S          , 0,
19026        CP1_                },        /* MSUBF.S */
19027     { instruction         , 0                   , 0   , 32,
19028        0xfc0003ff, 0xa00003f8, &MSUBF_D          , 0,
19029        CP1_                },        /* MSUBF.D */
19030 };
19031 
19032 
19033 static const Pool POOL32F_0[64] = {
19034     { reserved_block      , 0                   , 0   , 32,
19035        0xfc0001ff, 0xa0000000, 0                      , 0,
19036        CP1_                },        /* POOL32F_0~*(0) */
19037     { reserved_block      , 0                   , 0   , 32,
19038        0xfc0001ff, 0xa0000008, 0                      , 0,
19039        CP1_                },        /* POOL32F_0~*(1) */
19040     { reserved_block      , 0                   , 0   , 32,
19041        0xfc0001ff, 0xa0000010, 0                      , 0,
19042        CP1_                },        /* POOL32F_0~*(2) */
19043     { reserved_block      , 0                   , 0   , 32,
19044        0xfc0001ff, 0xa0000018, 0                      , 0,
19045        CP1_                },        /* POOL32F_0~*(3) */
19046     { pool                , RINT_fmt            , 2   , 32,
19047        0xfc0001ff, 0xa0000020, 0                      , 0,
19048        CP1_                },        /* RINT.fmt */
19049     { reserved_block      , 0                   , 0   , 32,
19050        0xfc0001ff, 0xa0000028, 0                      , 0,
19051        CP1_                },        /* POOL32F_0~*(5) */
19052     { pool                , ADD_fmt0            , 2   , 32,
19053        0xfc0001ff, 0xa0000030, 0                      , 0,
19054        CP1_                },        /* ADD.fmt0 */
19055     { pool                , SELEQZ_fmt          , 2   , 32,
19056        0xfc0001ff, 0xa0000038, 0                      , 0,
19057        CP1_                },        /* SELEQZ.fmt */
19058     { reserved_block      , 0                   , 0   , 32,
19059        0xfc0001ff, 0xa0000040, 0                      , 0,
19060        CP1_                },        /* POOL32F_0~*(8) */
19061     { reserved_block      , 0                   , 0   , 32,
19062        0xfc0001ff, 0xa0000048, 0                      , 0,
19063        CP1_                },        /* POOL32F_0~*(9) */
19064     { reserved_block      , 0                   , 0   , 32,
19065        0xfc0001ff, 0xa0000050, 0                      , 0,
19066        CP1_                },        /* POOL32F_0~*(10) */
19067     { reserved_block      , 0                   , 0   , 32,
19068        0xfc0001ff, 0xa0000058, 0                      , 0,
19069        CP1_                },        /* POOL32F_0~*(11) */
19070     { pool                , CLASS_fmt           , 2   , 32,
19071        0xfc0001ff, 0xa0000060, 0                      , 0,
19072        CP1_                },        /* CLASS.fmt */
19073     { reserved_block      , 0                   , 0   , 32,
19074        0xfc0001ff, 0xa0000068, 0                      , 0,
19075        CP1_                },        /* POOL32F_0~*(13) */
19076     { pool                , SUB_fmt0            , 2   , 32,
19077        0xfc0001ff, 0xa0000070, 0                      , 0,
19078        CP1_                },        /* SUB.fmt0 */
19079     { pool                , SELNEZ_fmt          , 2   , 32,
19080        0xfc0001ff, 0xa0000078, 0                      , 0,
19081        CP1_                },        /* SELNEZ.fmt */
19082     { reserved_block      , 0                   , 0   , 32,
19083        0xfc0001ff, 0xa0000080, 0                      , 0,
19084        CP1_                },        /* POOL32F_0~*(16) */
19085     { reserved_block      , 0                   , 0   , 32,
19086        0xfc0001ff, 0xa0000088, 0                      , 0,
19087        CP1_                },        /* POOL32F_0~*(17) */
19088     { reserved_block      , 0                   , 0   , 32,
19089        0xfc0001ff, 0xa0000090, 0                      , 0,
19090        CP1_                },        /* POOL32F_0~*(18) */
19091     { reserved_block      , 0                   , 0   , 32,
19092        0xfc0001ff, 0xa0000098, 0                      , 0,
19093        CP1_                },        /* POOL32F_0~*(19) */
19094     { reserved_block      , 0                   , 0   , 32,
19095        0xfc0001ff, 0xa00000a0, 0                      , 0,
19096        CP1_                },        /* POOL32F_0~*(20) */
19097     { reserved_block      , 0                   , 0   , 32,
19098        0xfc0001ff, 0xa00000a8, 0                      , 0,
19099        CP1_                },        /* POOL32F_0~*(21) */
19100     { pool                , MUL_fmt0            , 2   , 32,
19101        0xfc0001ff, 0xa00000b0, 0                      , 0,
19102        CP1_                },        /* MUL.fmt0 */
19103     { pool                , SEL_fmt             , 2   , 32,
19104        0xfc0001ff, 0xa00000b8, 0                      , 0,
19105        CP1_                },        /* SEL.fmt */
19106     { reserved_block      , 0                   , 0   , 32,
19107        0xfc0001ff, 0xa00000c0, 0                      , 0,
19108        CP1_                },        /* POOL32F_0~*(24) */
19109     { reserved_block      , 0                   , 0   , 32,
19110        0xfc0001ff, 0xa00000c8, 0                      , 0,
19111        CP1_                },        /* POOL32F_0~*(25) */
19112     { reserved_block      , 0                   , 0   , 32,
19113        0xfc0001ff, 0xa00000d0, 0                      , 0,
19114        CP1_                },        /* POOL32F_0~*(26) */
19115     { reserved_block      , 0                   , 0   , 32,
19116        0xfc0001ff, 0xa00000d8, 0                      , 0,
19117        CP1_                },        /* POOL32F_0~*(27) */
19118     { reserved_block      , 0                   , 0   , 32,
19119        0xfc0001ff, 0xa00000e0, 0                      , 0,
19120        CP1_                },        /* POOL32F_0~*(28) */
19121     { reserved_block      , 0                   , 0   , 32,
19122        0xfc0001ff, 0xa00000e8, 0                      , 0,
19123        CP1_                },        /* POOL32F_0~*(29) */
19124     { pool                , DIV_fmt0            , 2   , 32,
19125        0xfc0001ff, 0xa00000f0, 0                      , 0,
19126        CP1_                },        /* DIV.fmt0 */
19127     { reserved_block      , 0                   , 0   , 32,
19128        0xfc0001ff, 0xa00000f8, 0                      , 0,
19129        CP1_                },        /* POOL32F_0~*(31) */
19130     { reserved_block      , 0                   , 0   , 32,
19131        0xfc0001ff, 0xa0000100, 0                      , 0,
19132        CP1_                },        /* POOL32F_0~*(32) */
19133     { reserved_block      , 0                   , 0   , 32,
19134        0xfc0001ff, 0xa0000108, 0                      , 0,
19135        CP1_                },        /* POOL32F_0~*(33) */
19136     { reserved_block      , 0                   , 0   , 32,
19137        0xfc0001ff, 0xa0000110, 0                      , 0,
19138        CP1_                },        /* POOL32F_0~*(34) */
19139     { reserved_block      , 0                   , 0   , 32,
19140        0xfc0001ff, 0xa0000118, 0                      , 0,
19141        CP1_                },        /* POOL32F_0~*(35) */
19142     { reserved_block      , 0                   , 0   , 32,
19143        0xfc0001ff, 0xa0000120, 0                      , 0,
19144        CP1_                },        /* POOL32F_0~*(36) */
19145     { reserved_block      , 0                   , 0   , 32,
19146        0xfc0001ff, 0xa0000128, 0                      , 0,
19147        CP1_                },        /* POOL32F_0~*(37) */
19148     { pool                , ADD_fmt1            , 2   , 32,
19149        0xfc0001ff, 0xa0000130, 0                      , 0,
19150        CP1_                },        /* ADD.fmt1 */
19151     { reserved_block      , 0                   , 0   , 32,
19152        0xfc0001ff, 0xa0000138, 0                      , 0,
19153        CP1_                },        /* POOL32F_0~*(39) */
19154     { reserved_block      , 0                   , 0   , 32,
19155        0xfc0001ff, 0xa0000140, 0                      , 0,
19156        CP1_                },        /* POOL32F_0~*(40) */
19157     { reserved_block      , 0                   , 0   , 32,
19158        0xfc0001ff, 0xa0000148, 0                      , 0,
19159        CP1_                },        /* POOL32F_0~*(41) */
19160     { reserved_block      , 0                   , 0   , 32,
19161        0xfc0001ff, 0xa0000150, 0                      , 0,
19162        CP1_                },        /* POOL32F_0~*(42) */
19163     { reserved_block      , 0                   , 0   , 32,
19164        0xfc0001ff, 0xa0000158, 0                      , 0,
19165        CP1_                },        /* POOL32F_0~*(43) */
19166     { reserved_block      , 0                   , 0   , 32,
19167        0xfc0001ff, 0xa0000160, 0                      , 0,
19168        CP1_                },        /* POOL32F_0~*(44) */
19169     { reserved_block      , 0                   , 0   , 32,
19170        0xfc0001ff, 0xa0000168, 0                      , 0,
19171        CP1_                },        /* POOL32F_0~*(45) */
19172     { pool                , SUB_fmt1            , 2   , 32,
19173        0xfc0001ff, 0xa0000170, 0                      , 0,
19174        CP1_                },        /* SUB.fmt1 */
19175     { reserved_block      , 0                   , 0   , 32,
19176        0xfc0001ff, 0xa0000178, 0                      , 0,
19177        CP1_                },        /* POOL32F_0~*(47) */
19178     { reserved_block      , 0                   , 0   , 32,
19179        0xfc0001ff, 0xa0000180, 0                      , 0,
19180        CP1_                },        /* POOL32F_0~*(48) */
19181     { reserved_block      , 0                   , 0   , 32,
19182        0xfc0001ff, 0xa0000188, 0                      , 0,
19183        CP1_                },        /* POOL32F_0~*(49) */
19184     { reserved_block      , 0                   , 0   , 32,
19185        0xfc0001ff, 0xa0000190, 0                      , 0,
19186        CP1_                },        /* POOL32F_0~*(50) */
19187     { reserved_block      , 0                   , 0   , 32,
19188        0xfc0001ff, 0xa0000198, 0                      , 0,
19189        CP1_                },        /* POOL32F_0~*(51) */
19190     { reserved_block      , 0                   , 0   , 32,
19191        0xfc0001ff, 0xa00001a0, 0                      , 0,
19192        CP1_                },        /* POOL32F_0~*(52) */
19193     { reserved_block      , 0                   , 0   , 32,
19194        0xfc0001ff, 0xa00001a8, 0                      , 0,
19195        CP1_                },        /* POOL32F_0~*(53) */
19196     { pool                , MUL_fmt1            , 2   , 32,
19197        0xfc0001ff, 0xa00001b0, 0                      , 0,
19198        CP1_                },        /* MUL.fmt1 */
19199     { pool                , MADDF_fmt           , 2   , 32,
19200        0xfc0001ff, 0xa00001b8, 0                      , 0,
19201        CP1_                },        /* MADDF.fmt */
19202     { reserved_block      , 0                   , 0   , 32,
19203        0xfc0001ff, 0xa00001c0, 0                      , 0,
19204        CP1_                },        /* POOL32F_0~*(56) */
19205     { reserved_block      , 0                   , 0   , 32,
19206        0xfc0001ff, 0xa00001c8, 0                      , 0,
19207        CP1_                },        /* POOL32F_0~*(57) */
19208     { reserved_block      , 0                   , 0   , 32,
19209        0xfc0001ff, 0xa00001d0, 0                      , 0,
19210        CP1_                },        /* POOL32F_0~*(58) */
19211     { reserved_block      , 0                   , 0   , 32,
19212        0xfc0001ff, 0xa00001d8, 0                      , 0,
19213        CP1_                },        /* POOL32F_0~*(59) */
19214     { reserved_block      , 0                   , 0   , 32,
19215        0xfc0001ff, 0xa00001e0, 0                      , 0,
19216        CP1_                },        /* POOL32F_0~*(60) */
19217     { reserved_block      , 0                   , 0   , 32,
19218        0xfc0001ff, 0xa00001e8, 0                      , 0,
19219        CP1_                },        /* POOL32F_0~*(61) */
19220     { pool                , DIV_fmt1            , 2   , 32,
19221        0xfc0001ff, 0xa00001f0, 0                      , 0,
19222        CP1_                },        /* DIV.fmt1 */
19223     { pool                , MSUBF_fmt           , 2   , 32,
19224        0xfc0001ff, 0xa00001f8, 0                      , 0,
19225        CP1_                },        /* MSUBF.fmt */
19226 };
19227 
19228 
19229 static const Pool MIN_fmt[2] = {
19230     { instruction         , 0                   , 0   , 32,
19231        0xfc00023f, 0xa0000003, &MIN_S            , 0,
19232        CP1_                },        /* MIN.S */
19233     { instruction         , 0                   , 0   , 32,
19234        0xfc00023f, 0xa0000203, &MIN_D            , 0,
19235        CP1_                },        /* MIN.D */
19236 };
19237 
19238 
19239 static const Pool MAX_fmt[2] = {
19240     { instruction         , 0                   , 0   , 32,
19241        0xfc00023f, 0xa000000b, &MAX_S            , 0,
19242        CP1_                },        /* MAX.S */
19243     { instruction         , 0                   , 0   , 32,
19244        0xfc00023f, 0xa000020b, &MAX_D            , 0,
19245        CP1_                },        /* MAX.D */
19246 };
19247 
19248 
19249 static const Pool MINA_fmt[2] = {
19250     { instruction         , 0                   , 0   , 32,
19251        0xfc00023f, 0xa0000023, &MINA_S           , 0,
19252        CP1_                },        /* MINA.S */
19253     { instruction         , 0                   , 0   , 32,
19254        0xfc00023f, 0xa0000223, &MINA_D           , 0,
19255        CP1_                },        /* MINA.D */
19256 };
19257 
19258 
19259 static const Pool MAXA_fmt[2] = {
19260     { instruction         , 0                   , 0   , 32,
19261        0xfc00023f, 0xa000002b, &MAXA_S           , 0,
19262        CP1_                },        /* MAXA.S */
19263     { instruction         , 0                   , 0   , 32,
19264        0xfc00023f, 0xa000022b, &MAXA_D           , 0,
19265        CP1_                },        /* MAXA.D */
19266 };
19267 
19268 
19269 static const Pool CVT_L_fmt[2] = {
19270     { instruction         , 0                   , 0   , 32,
19271        0xfc007fff, 0xa000013b, &CVT_L_S          , 0,
19272        CP1_                },        /* CVT.L.S */
19273     { instruction         , 0                   , 0   , 32,
19274        0xfc007fff, 0xa000413b, &CVT_L_D          , 0,
19275        CP1_                },        /* CVT.L.D */
19276 };
19277 
19278 
19279 static const Pool RSQRT_fmt[2] = {
19280     { instruction         , 0                   , 0   , 32,
19281        0xfc007fff, 0xa000023b, &RSQRT_S          , 0,
19282        CP1_                },        /* RSQRT.S */
19283     { instruction         , 0                   , 0   , 32,
19284        0xfc007fff, 0xa000423b, &RSQRT_D          , 0,
19285        CP1_                },        /* RSQRT.D */
19286 };
19287 
19288 
19289 static const Pool FLOOR_L_fmt[2] = {
19290     { instruction         , 0                   , 0   , 32,
19291        0xfc007fff, 0xa000033b, &FLOOR_L_S        , 0,
19292        CP1_                },        /* FLOOR.L.S */
19293     { instruction         , 0                   , 0   , 32,
19294        0xfc007fff, 0xa000433b, &FLOOR_L_D        , 0,
19295        CP1_                },        /* FLOOR.L.D */
19296 };
19297 
19298 
19299 static const Pool CVT_W_fmt[2] = {
19300     { instruction         , 0                   , 0   , 32,
19301        0xfc007fff, 0xa000093b, &CVT_W_S          , 0,
19302        CP1_                },        /* CVT.W.S */
19303     { instruction         , 0                   , 0   , 32,
19304        0xfc007fff, 0xa000493b, &CVT_W_D          , 0,
19305        CP1_                },        /* CVT.W.D */
19306 };
19307 
19308 
19309 static const Pool SQRT_fmt[2] = {
19310     { instruction         , 0                   , 0   , 32,
19311        0xfc007fff, 0xa0000a3b, &SQRT_S           , 0,
19312        CP1_                },        /* SQRT.S */
19313     { instruction         , 0                   , 0   , 32,
19314        0xfc007fff, 0xa0004a3b, &SQRT_D           , 0,
19315        CP1_                },        /* SQRT.D */
19316 };
19317 
19318 
19319 static const Pool FLOOR_W_fmt[2] = {
19320     { instruction         , 0                   , 0   , 32,
19321        0xfc007fff, 0xa0000b3b, &FLOOR_W_S        , 0,
19322        CP1_                },        /* FLOOR.W.S */
19323     { instruction         , 0                   , 0   , 32,
19324        0xfc007fff, 0xa0004b3b, &FLOOR_W_D        , 0,
19325        CP1_                },        /* FLOOR.W.D */
19326 };
19327 
19328 
19329 static const Pool RECIP_fmt[2] = {
19330     { instruction         , 0                   , 0   , 32,
19331        0xfc007fff, 0xa000123b, &RECIP_S          , 0,
19332        CP1_                },        /* RECIP.S */
19333     { instruction         , 0                   , 0   , 32,
19334        0xfc007fff, 0xa000523b, &RECIP_D          , 0,
19335        CP1_                },        /* RECIP.D */
19336 };
19337 
19338 
19339 static const Pool CEIL_L_fmt[2] = {
19340     { instruction         , 0                   , 0   , 32,
19341        0xfc007fff, 0xa000133b, &CEIL_L_S         , 0,
19342        CP1_                },        /* CEIL.L.S */
19343     { instruction         , 0                   , 0   , 32,
19344        0xfc007fff, 0xa000533b, &CEIL_L_D         , 0,
19345        CP1_                },        /* CEIL.L.D */
19346 };
19347 
19348 
19349 static const Pool CEIL_W_fmt[2] = {
19350     { instruction         , 0                   , 0   , 32,
19351        0xfc007fff, 0xa0001b3b, &CEIL_W_S         , 0,
19352        CP1_                },        /* CEIL.W.S */
19353     { instruction         , 0                   , 0   , 32,
19354        0xfc007fff, 0xa0005b3b, &CEIL_W_D         , 0,
19355        CP1_                },        /* CEIL.W.D */
19356 };
19357 
19358 
19359 static const Pool TRUNC_L_fmt[2] = {
19360     { instruction         , 0                   , 0   , 32,
19361        0xfc007fff, 0xa000233b, &TRUNC_L_S        , 0,
19362        CP1_                },        /* TRUNC.L.S */
19363     { instruction         , 0                   , 0   , 32,
19364        0xfc007fff, 0xa000633b, &TRUNC_L_D        , 0,
19365        CP1_                },        /* TRUNC.L.D */
19366 };
19367 
19368 
19369 static const Pool TRUNC_W_fmt[2] = {
19370     { instruction         , 0                   , 0   , 32,
19371        0xfc007fff, 0xa0002b3b, &TRUNC_W_S        , 0,
19372        CP1_                },        /* TRUNC.W.S */
19373     { instruction         , 0                   , 0   , 32,
19374        0xfc007fff, 0xa0006b3b, &TRUNC_W_D        , 0,
19375        CP1_                },        /* TRUNC.W.D */
19376 };
19377 
19378 
19379 static const Pool ROUND_L_fmt[2] = {
19380     { instruction         , 0                   , 0   , 32,
19381        0xfc007fff, 0xa000333b, &ROUND_L_S        , 0,
19382        CP1_                },        /* ROUND.L.S */
19383     { instruction         , 0                   , 0   , 32,
19384        0xfc007fff, 0xa000733b, &ROUND_L_D        , 0,
19385        CP1_                },        /* ROUND.L.D */
19386 };
19387 
19388 
19389 static const Pool ROUND_W_fmt[2] = {
19390     { instruction         , 0                   , 0   , 32,
19391        0xfc007fff, 0xa0003b3b, &ROUND_W_S        , 0,
19392        CP1_                },        /* ROUND.W.S */
19393     { instruction         , 0                   , 0   , 32,
19394        0xfc007fff, 0xa0007b3b, &ROUND_W_D        , 0,
19395        CP1_                },        /* ROUND.W.D */
19396 };
19397 
19398 
19399 static const Pool POOL32Fxf_0[64] = {
19400     { reserved_block      , 0                   , 0   , 32,
19401        0xfc003fff, 0xa000003b, 0                      , 0,
19402        CP1_                },        /* POOL32Fxf_0~*(0) */
19403     { pool                , CVT_L_fmt           , 2   , 32,
19404        0xfc003fff, 0xa000013b, 0                      , 0,
19405        CP1_                },        /* CVT.L.fmt */
19406     { pool                , RSQRT_fmt           , 2   , 32,
19407        0xfc003fff, 0xa000023b, 0                      , 0,
19408        CP1_                },        /* RSQRT.fmt */
19409     { pool                , FLOOR_L_fmt         , 2   , 32,
19410        0xfc003fff, 0xa000033b, 0                      , 0,
19411        CP1_                },        /* FLOOR.L.fmt */
19412     { reserved_block      , 0                   , 0   , 32,
19413        0xfc003fff, 0xa000043b, 0                      , 0,
19414        CP1_                },        /* POOL32Fxf_0~*(4) */
19415     { reserved_block      , 0                   , 0   , 32,
19416        0xfc003fff, 0xa000053b, 0                      , 0,
19417        CP1_                },        /* POOL32Fxf_0~*(5) */
19418     { reserved_block      , 0                   , 0   , 32,
19419        0xfc003fff, 0xa000063b, 0                      , 0,
19420        CP1_                },        /* POOL32Fxf_0~*(6) */
19421     { reserved_block      , 0                   , 0   , 32,
19422        0xfc003fff, 0xa000073b, 0                      , 0,
19423        CP1_                },        /* POOL32Fxf_0~*(7) */
19424     { reserved_block      , 0                   , 0   , 32,
19425        0xfc003fff, 0xa000083b, 0                      , 0,
19426        CP1_                },        /* POOL32Fxf_0~*(8) */
19427     { pool                , CVT_W_fmt           , 2   , 32,
19428        0xfc003fff, 0xa000093b, 0                      , 0,
19429        CP1_                },        /* CVT.W.fmt */
19430     { pool                , SQRT_fmt            , 2   , 32,
19431        0xfc003fff, 0xa0000a3b, 0                      , 0,
19432        CP1_                },        /* SQRT.fmt */
19433     { pool                , FLOOR_W_fmt         , 2   , 32,
19434        0xfc003fff, 0xa0000b3b, 0                      , 0,
19435        CP1_                },        /* FLOOR.W.fmt */
19436     { reserved_block      , 0                   , 0   , 32,
19437        0xfc003fff, 0xa0000c3b, 0                      , 0,
19438        CP1_                },        /* POOL32Fxf_0~*(12) */
19439     { reserved_block      , 0                   , 0   , 32,
19440        0xfc003fff, 0xa0000d3b, 0                      , 0,
19441        CP1_                },        /* POOL32Fxf_0~*(13) */
19442     { reserved_block      , 0                   , 0   , 32,
19443        0xfc003fff, 0xa0000e3b, 0                      , 0,
19444        CP1_                },        /* POOL32Fxf_0~*(14) */
19445     { reserved_block      , 0                   , 0   , 32,
19446        0xfc003fff, 0xa0000f3b, 0                      , 0,
19447        CP1_                },        /* POOL32Fxf_0~*(15) */
19448     { instruction         , 0                   , 0   , 32,
19449        0xfc003fff, 0xa000103b, &CFC1             , 0,
19450        CP1_                },        /* CFC1 */
19451     { reserved_block      , 0                   , 0   , 32,
19452        0xfc003fff, 0xa000113b, 0                      , 0,
19453        CP1_                },        /* POOL32Fxf_0~*(17) */
19454     { pool                , RECIP_fmt           , 2   , 32,
19455        0xfc003fff, 0xa000123b, 0                      , 0,
19456        CP1_                },        /* RECIP.fmt */
19457     { pool                , CEIL_L_fmt          , 2   , 32,
19458        0xfc003fff, 0xa000133b, 0                      , 0,
19459        CP1_                },        /* CEIL.L.fmt */
19460     { reserved_block      , 0                   , 0   , 32,
19461        0xfc003fff, 0xa000143b, 0                      , 0,
19462        CP1_                },        /* POOL32Fxf_0~*(20) */
19463     { reserved_block      , 0                   , 0   , 32,
19464        0xfc003fff, 0xa000153b, 0                      , 0,
19465        CP1_                },        /* POOL32Fxf_0~*(21) */
19466     { reserved_block      , 0                   , 0   , 32,
19467        0xfc003fff, 0xa000163b, 0                      , 0,
19468        CP1_                },        /* POOL32Fxf_0~*(22) */
19469     { reserved_block      , 0                   , 0   , 32,
19470        0xfc003fff, 0xa000173b, 0                      , 0,
19471        CP1_                },        /* POOL32Fxf_0~*(23) */
19472     { instruction         , 0                   , 0   , 32,
19473        0xfc003fff, 0xa000183b, &CTC1             , 0,
19474        CP1_                },        /* CTC1 */
19475     { reserved_block      , 0                   , 0   , 32,
19476        0xfc003fff, 0xa000193b, 0                      , 0,
19477        CP1_                },        /* POOL32Fxf_0~*(25) */
19478     { reserved_block      , 0                   , 0   , 32,
19479        0xfc003fff, 0xa0001a3b, 0                      , 0,
19480        CP1_                },        /* POOL32Fxf_0~*(26) */
19481     { pool                , CEIL_W_fmt          , 2   , 32,
19482        0xfc003fff, 0xa0001b3b, 0                      , 0,
19483        CP1_                },        /* CEIL.W.fmt */
19484     { reserved_block      , 0                   , 0   , 32,
19485        0xfc003fff, 0xa0001c3b, 0                      , 0,
19486        CP1_                },        /* POOL32Fxf_0~*(28) */
19487     { reserved_block      , 0                   , 0   , 32,
19488        0xfc003fff, 0xa0001d3b, 0                      , 0,
19489        CP1_                },        /* POOL32Fxf_0~*(29) */
19490     { reserved_block      , 0                   , 0   , 32,
19491        0xfc003fff, 0xa0001e3b, 0                      , 0,
19492        CP1_                },        /* POOL32Fxf_0~*(30) */
19493     { reserved_block      , 0                   , 0   , 32,
19494        0xfc003fff, 0xa0001f3b, 0                      , 0,
19495        CP1_                },        /* POOL32Fxf_0~*(31) */
19496     { instruction         , 0                   , 0   , 32,
19497        0xfc003fff, 0xa000203b, &MFC1             , 0,
19498        CP1_                },        /* MFC1 */
19499     { instruction         , 0                   , 0   , 32,
19500        0xfc003fff, 0xa000213b, &CVT_S_PL         , 0,
19501        CP1_                },        /* CVT.S.PL */
19502     { reserved_block      , 0                   , 0   , 32,
19503        0xfc003fff, 0xa000223b, 0                      , 0,
19504        CP1_                },        /* POOL32Fxf_0~*(34) */
19505     { pool                , TRUNC_L_fmt         , 2   , 32,
19506        0xfc003fff, 0xa000233b, 0                      , 0,
19507        CP1_                },        /* TRUNC.L.fmt */
19508     { instruction         , 0                   , 0   , 32,
19509        0xfc003fff, 0xa000243b, &DMFC1            , 0,
19510        CP1_ | MIPS64_      },        /* DMFC1 */
19511     { reserved_block      , 0                   , 0   , 32,
19512        0xfc003fff, 0xa000253b, 0                      , 0,
19513        CP1_                },        /* POOL32Fxf_0~*(37) */
19514     { reserved_block      , 0                   , 0   , 32,
19515        0xfc003fff, 0xa000263b, 0                      , 0,
19516        CP1_                },        /* POOL32Fxf_0~*(38) */
19517     { reserved_block      , 0                   , 0   , 32,
19518        0xfc003fff, 0xa000273b, 0                      , 0,
19519        CP1_                },        /* POOL32Fxf_0~*(39) */
19520     { instruction         , 0                   , 0   , 32,
19521        0xfc003fff, 0xa000283b, &MTC1             , 0,
19522        CP1_                },        /* MTC1 */
19523     { instruction         , 0                   , 0   , 32,
19524        0xfc003fff, 0xa000293b, &CVT_S_PU         , 0,
19525        CP1_                },        /* CVT.S.PU */
19526     { reserved_block      , 0                   , 0   , 32,
19527        0xfc003fff, 0xa0002a3b, 0                      , 0,
19528        CP1_                },        /* POOL32Fxf_0~*(42) */
19529     { pool                , TRUNC_W_fmt         , 2   , 32,
19530        0xfc003fff, 0xa0002b3b, 0                      , 0,
19531        CP1_                },        /* TRUNC.W.fmt */
19532     { instruction         , 0                   , 0   , 32,
19533        0xfc003fff, 0xa0002c3b, &DMTC1            , 0,
19534        CP1_ | MIPS64_      },        /* DMTC1 */
19535     { reserved_block      , 0                   , 0   , 32,
19536        0xfc003fff, 0xa0002d3b, 0                      , 0,
19537        CP1_                },        /* POOL32Fxf_0~*(45) */
19538     { reserved_block      , 0                   , 0   , 32,
19539        0xfc003fff, 0xa0002e3b, 0                      , 0,
19540        CP1_                },        /* POOL32Fxf_0~*(46) */
19541     { reserved_block      , 0                   , 0   , 32,
19542        0xfc003fff, 0xa0002f3b, 0                      , 0,
19543        CP1_                },        /* POOL32Fxf_0~*(47) */
19544     { instruction         , 0                   , 0   , 32,
19545        0xfc003fff, 0xa000303b, &MFHC1            , 0,
19546        CP1_                },        /* MFHC1 */
19547     { reserved_block      , 0                   , 0   , 32,
19548        0xfc003fff, 0xa000313b, 0                      , 0,
19549        CP1_                },        /* POOL32Fxf_0~*(49) */
19550     { reserved_block      , 0                   , 0   , 32,
19551        0xfc003fff, 0xa000323b, 0                      , 0,
19552        CP1_                },        /* POOL32Fxf_0~*(50) */
19553     { pool                , ROUND_L_fmt         , 2   , 32,
19554        0xfc003fff, 0xa000333b, 0                      , 0,
19555        CP1_                },        /* ROUND.L.fmt */
19556     { reserved_block      , 0                   , 0   , 32,
19557        0xfc003fff, 0xa000343b, 0                      , 0,
19558        CP1_                },        /* POOL32Fxf_0~*(52) */
19559     { reserved_block      , 0                   , 0   , 32,
19560        0xfc003fff, 0xa000353b, 0                      , 0,
19561        CP1_                },        /* POOL32Fxf_0~*(53) */
19562     { reserved_block      , 0                   , 0   , 32,
19563        0xfc003fff, 0xa000363b, 0                      , 0,
19564        CP1_                },        /* POOL32Fxf_0~*(54) */
19565     { reserved_block      , 0                   , 0   , 32,
19566        0xfc003fff, 0xa000373b, 0                      , 0,
19567        CP1_                },        /* POOL32Fxf_0~*(55) */
19568     { instruction         , 0                   , 0   , 32,
19569        0xfc003fff, 0xa000383b, &MTHC1            , 0,
19570        CP1_                },        /* MTHC1 */
19571     { reserved_block      , 0                   , 0   , 32,
19572        0xfc003fff, 0xa000393b, 0                      , 0,
19573        CP1_                },        /* POOL32Fxf_0~*(57) */
19574     { reserved_block      , 0                   , 0   , 32,
19575        0xfc003fff, 0xa0003a3b, 0                      , 0,
19576        CP1_                },        /* POOL32Fxf_0~*(58) */
19577     { pool                , ROUND_W_fmt         , 2   , 32,
19578        0xfc003fff, 0xa0003b3b, 0                      , 0,
19579        CP1_                },        /* ROUND.W.fmt */
19580     { reserved_block      , 0                   , 0   , 32,
19581        0xfc003fff, 0xa0003c3b, 0                      , 0,
19582        CP1_                },        /* POOL32Fxf_0~*(60) */
19583     { reserved_block      , 0                   , 0   , 32,
19584        0xfc003fff, 0xa0003d3b, 0                      , 0,
19585        CP1_                },        /* POOL32Fxf_0~*(61) */
19586     { reserved_block      , 0                   , 0   , 32,
19587        0xfc003fff, 0xa0003e3b, 0                      , 0,
19588        CP1_                },        /* POOL32Fxf_0~*(62) */
19589     { reserved_block      , 0                   , 0   , 32,
19590        0xfc003fff, 0xa0003f3b, 0                      , 0,
19591        CP1_                },        /* POOL32Fxf_0~*(63) */
19592 };
19593 
19594 
19595 static const Pool MOV_fmt[4] = {
19596     { instruction         , 0                   , 0   , 32,
19597        0xfc007fff, 0xa000007b, &MOV_S            , 0,
19598        CP1_                },        /* MOV.S */
19599     { instruction         , 0                   , 0   , 32,
19600        0xfc007fff, 0xa000207b, &MOV_D            , 0,
19601        CP1_                },        /* MOV.D */
19602     { reserved_block      , 0                   , 0   , 32,
19603        0xfc007fff, 0xa000407b, 0                      , 0,
19604        CP1_                },        /* MOV.fmt~*(2) */
19605     { reserved_block      , 0                   , 0   , 32,
19606        0xfc007fff, 0xa000607b, 0                      , 0,
19607        CP1_                },        /* MOV.fmt~*(3) */
19608 };
19609 
19610 
19611 static const Pool ABS_fmt[4] = {
19612     { instruction         , 0                   , 0   , 32,
19613        0xfc007fff, 0xa000037b, &ABS_S            , 0,
19614        CP1_                },        /* ABS.S */
19615     { instruction         , 0                   , 0   , 32,
19616        0xfc007fff, 0xa000237b, &ABS_D            , 0,
19617        CP1_                },        /* ABS.D */
19618     { reserved_block      , 0                   , 0   , 32,
19619        0xfc007fff, 0xa000437b, 0                      , 0,
19620        CP1_                },        /* ABS.fmt~*(2) */
19621     { reserved_block      , 0                   , 0   , 32,
19622        0xfc007fff, 0xa000637b, 0                      , 0,
19623        CP1_                },        /* ABS.fmt~*(3) */
19624 };
19625 
19626 
19627 static const Pool NEG_fmt[4] = {
19628     { instruction         , 0                   , 0   , 32,
19629        0xfc007fff, 0xa0000b7b, &NEG_S            , 0,
19630        CP1_                },        /* NEG.S */
19631     { instruction         , 0                   , 0   , 32,
19632        0xfc007fff, 0xa0002b7b, &NEG_D            , 0,
19633        CP1_                },        /* NEG.D */
19634     { reserved_block      , 0                   , 0   , 32,
19635        0xfc007fff, 0xa0004b7b, 0                      , 0,
19636        CP1_                },        /* NEG.fmt~*(2) */
19637     { reserved_block      , 0                   , 0   , 32,
19638        0xfc007fff, 0xa0006b7b, 0                      , 0,
19639        CP1_                },        /* NEG.fmt~*(3) */
19640 };
19641 
19642 
19643 static const Pool CVT_D_fmt[4] = {
19644     { instruction         , 0                   , 0   , 32,
19645        0xfc007fff, 0xa000137b, &CVT_D_S          , 0,
19646        CP1_                },        /* CVT.D.S */
19647     { instruction         , 0                   , 0   , 32,
19648        0xfc007fff, 0xa000337b, &CVT_D_W          , 0,
19649        CP1_                },        /* CVT.D.W */
19650     { instruction         , 0                   , 0   , 32,
19651        0xfc007fff, 0xa000537b, &CVT_D_L          , 0,
19652        CP1_                },        /* CVT.D.L */
19653     { reserved_block      , 0                   , 0   , 32,
19654        0xfc007fff, 0xa000737b, 0                      , 0,
19655        CP1_                },        /* CVT.D.fmt~*(3) */
19656 };
19657 
19658 
19659 static const Pool CVT_S_fmt[4] = {
19660     { instruction         , 0                   , 0   , 32,
19661        0xfc007fff, 0xa0001b7b, &CVT_S_D          , 0,
19662        CP1_                },        /* CVT.S.D */
19663     { instruction         , 0                   , 0   , 32,
19664        0xfc007fff, 0xa0003b7b, &CVT_S_W          , 0,
19665        CP1_                },        /* CVT.S.W */
19666     { instruction         , 0                   , 0   , 32,
19667        0xfc007fff, 0xa0005b7b, &CVT_S_L          , 0,
19668        CP1_                },        /* CVT.S.L */
19669     { reserved_block      , 0                   , 0   , 32,
19670        0xfc007fff, 0xa0007b7b, 0                      , 0,
19671        CP1_                },        /* CVT.S.fmt~*(3) */
19672 };
19673 
19674 
19675 static const Pool POOL32Fxf_1[32] = {
19676     { pool                , MOV_fmt             , 4   , 32,
19677        0xfc001fff, 0xa000007b, 0                      , 0,
19678        CP1_                },        /* MOV.fmt */
19679     { reserved_block      , 0                   , 0   , 32,
19680        0xfc001fff, 0xa000017b, 0                      , 0,
19681        CP1_                },        /* POOL32Fxf_1~*(1) */
19682     { reserved_block      , 0                   , 0   , 32,
19683        0xfc001fff, 0xa000027b, 0                      , 0,
19684        CP1_                },        /* POOL32Fxf_1~*(2) */
19685     { pool                , ABS_fmt             , 4   , 32,
19686        0xfc001fff, 0xa000037b, 0                      , 0,
19687        CP1_                },        /* ABS.fmt */
19688     { reserved_block      , 0                   , 0   , 32,
19689        0xfc001fff, 0xa000047b, 0                      , 0,
19690        CP1_                },        /* POOL32Fxf_1~*(4) */
19691     { reserved_block      , 0                   , 0   , 32,
19692        0xfc001fff, 0xa000057b, 0                      , 0,
19693        CP1_                },        /* POOL32Fxf_1~*(5) */
19694     { reserved_block      , 0                   , 0   , 32,
19695        0xfc001fff, 0xa000067b, 0                      , 0,
19696        CP1_                },        /* POOL32Fxf_1~*(6) */
19697     { reserved_block      , 0                   , 0   , 32,
19698        0xfc001fff, 0xa000077b, 0                      , 0,
19699        CP1_                },        /* POOL32Fxf_1~*(7) */
19700     { reserved_block      , 0                   , 0   , 32,
19701        0xfc001fff, 0xa000087b, 0                      , 0,
19702        CP1_                },        /* POOL32Fxf_1~*(8) */
19703     { reserved_block      , 0                   , 0   , 32,
19704        0xfc001fff, 0xa000097b, 0                      , 0,
19705        CP1_                },        /* POOL32Fxf_1~*(9) */
19706     { reserved_block      , 0                   , 0   , 32,
19707        0xfc001fff, 0xa0000a7b, 0                      , 0,
19708        CP1_                },        /* POOL32Fxf_1~*(10) */
19709     { pool                , NEG_fmt             , 4   , 32,
19710        0xfc001fff, 0xa0000b7b, 0                      , 0,
19711        CP1_                },        /* NEG.fmt */
19712     { reserved_block      , 0                   , 0   , 32,
19713        0xfc001fff, 0xa0000c7b, 0                      , 0,
19714        CP1_                },        /* POOL32Fxf_1~*(12) */
19715     { reserved_block      , 0                   , 0   , 32,
19716        0xfc001fff, 0xa0000d7b, 0                      , 0,
19717        CP1_                },        /* POOL32Fxf_1~*(13) */
19718     { reserved_block      , 0                   , 0   , 32,
19719        0xfc001fff, 0xa0000e7b, 0                      , 0,
19720        CP1_                },        /* POOL32Fxf_1~*(14) */
19721     { reserved_block      , 0                   , 0   , 32,
19722        0xfc001fff, 0xa0000f7b, 0                      , 0,
19723        CP1_                },        /* POOL32Fxf_1~*(15) */
19724     { reserved_block      , 0                   , 0   , 32,
19725        0xfc001fff, 0xa000107b, 0                      , 0,
19726        CP1_                },        /* POOL32Fxf_1~*(16) */
19727     { reserved_block      , 0                   , 0   , 32,
19728        0xfc001fff, 0xa000117b, 0                      , 0,
19729        CP1_                },        /* POOL32Fxf_1~*(17) */
19730     { reserved_block      , 0                   , 0   , 32,
19731        0xfc001fff, 0xa000127b, 0                      , 0,
19732        CP1_                },        /* POOL32Fxf_1~*(18) */
19733     { pool                , CVT_D_fmt           , 4   , 32,
19734        0xfc001fff, 0xa000137b, 0                      , 0,
19735        CP1_                },        /* CVT.D.fmt */
19736     { reserved_block      , 0                   , 0   , 32,
19737        0xfc001fff, 0xa000147b, 0                      , 0,
19738        CP1_                },        /* POOL32Fxf_1~*(20) */
19739     { reserved_block      , 0                   , 0   , 32,
19740        0xfc001fff, 0xa000157b, 0                      , 0,
19741        CP1_                },        /* POOL32Fxf_1~*(21) */
19742     { reserved_block      , 0                   , 0   , 32,
19743        0xfc001fff, 0xa000167b, 0                      , 0,
19744        CP1_                },        /* POOL32Fxf_1~*(22) */
19745     { reserved_block      , 0                   , 0   , 32,
19746        0xfc001fff, 0xa000177b, 0                      , 0,
19747        CP1_                },        /* POOL32Fxf_1~*(23) */
19748     { reserved_block      , 0                   , 0   , 32,
19749        0xfc001fff, 0xa000187b, 0                      , 0,
19750        CP1_                },        /* POOL32Fxf_1~*(24) */
19751     { reserved_block      , 0                   , 0   , 32,
19752        0xfc001fff, 0xa000197b, 0                      , 0,
19753        CP1_                },        /* POOL32Fxf_1~*(25) */
19754     { reserved_block      , 0                   , 0   , 32,
19755        0xfc001fff, 0xa0001a7b, 0                      , 0,
19756        CP1_                },        /* POOL32Fxf_1~*(26) */
19757     { pool                , CVT_S_fmt           , 4   , 32,
19758        0xfc001fff, 0xa0001b7b, 0                      , 0,
19759        CP1_                },        /* CVT.S.fmt */
19760     { reserved_block      , 0                   , 0   , 32,
19761        0xfc001fff, 0xa0001c7b, 0                      , 0,
19762        CP1_                },        /* POOL32Fxf_1~*(28) */
19763     { reserved_block      , 0                   , 0   , 32,
19764        0xfc001fff, 0xa0001d7b, 0                      , 0,
19765        CP1_                },        /* POOL32Fxf_1~*(29) */
19766     { reserved_block      , 0                   , 0   , 32,
19767        0xfc001fff, 0xa0001e7b, 0                      , 0,
19768        CP1_                },        /* POOL32Fxf_1~*(30) */
19769     { reserved_block      , 0                   , 0   , 32,
19770        0xfc001fff, 0xa0001f7b, 0                      , 0,
19771        CP1_                },        /* POOL32Fxf_1~*(31) */
19772 };
19773 
19774 
19775 static const Pool POOL32Fxf[4] = {
19776     { pool                , POOL32Fxf_0         , 64  , 32,
19777        0xfc0000ff, 0xa000003b, 0                      , 0,
19778        CP1_                },        /* POOL32Fxf_0 */
19779     { pool                , POOL32Fxf_1         , 32  , 32,
19780        0xfc0000ff, 0xa000007b, 0                      , 0,
19781        CP1_                },        /* POOL32Fxf_1 */
19782     { reserved_block      , 0                   , 0   , 32,
19783        0xfc0000ff, 0xa00000bb, 0                      , 0,
19784        CP1_                },        /* POOL32Fxf~*(2) */
19785     { reserved_block      , 0                   , 0   , 32,
19786        0xfc0000ff, 0xa00000fb, 0                      , 0,
19787        CP1_                },        /* POOL32Fxf~*(3) */
19788 };
19789 
19790 
19791 static const Pool POOL32F_3[8] = {
19792     { pool                , MIN_fmt             , 2   , 32,
19793        0xfc00003f, 0xa0000003, 0                      , 0,
19794        CP1_                },        /* MIN.fmt */
19795     { pool                , MAX_fmt             , 2   , 32,
19796        0xfc00003f, 0xa000000b, 0                      , 0,
19797        CP1_                },        /* MAX.fmt */
19798     { reserved_block      , 0                   , 0   , 32,
19799        0xfc00003f, 0xa0000013, 0                      , 0,
19800        CP1_                },        /* POOL32F_3~*(2) */
19801     { reserved_block      , 0                   , 0   , 32,
19802        0xfc00003f, 0xa000001b, 0                      , 0,
19803        CP1_                },        /* POOL32F_3~*(3) */
19804     { pool                , MINA_fmt            , 2   , 32,
19805        0xfc00003f, 0xa0000023, 0                      , 0,
19806        CP1_                },        /* MINA.fmt */
19807     { pool                , MAXA_fmt            , 2   , 32,
19808        0xfc00003f, 0xa000002b, 0                      , 0,
19809        CP1_                },        /* MAXA.fmt */
19810     { reserved_block      , 0                   , 0   , 32,
19811        0xfc00003f, 0xa0000033, 0                      , 0,
19812        CP1_                },        /* POOL32F_3~*(6) */
19813     { pool                , POOL32Fxf           , 4   , 32,
19814        0xfc00003f, 0xa000003b, 0                      , 0,
19815        CP1_                },        /* POOL32Fxf */
19816 };
19817 
19818 
19819 static const Pool CMP_condn_S[32] = {
19820     { instruction         , 0                   , 0   , 32,
19821        0xfc0007ff, 0xa0000005, &CMP_AF_S         , 0,
19822        CP1_                },        /* CMP.AF.S */
19823     { instruction         , 0                   , 0   , 32,
19824        0xfc0007ff, 0xa0000045, &CMP_UN_S         , 0,
19825        CP1_                },        /* CMP.UN.S */
19826     { instruction         , 0                   , 0   , 32,
19827        0xfc0007ff, 0xa0000085, &CMP_EQ_S         , 0,
19828        CP1_                },        /* CMP.EQ.S */
19829     { instruction         , 0                   , 0   , 32,
19830        0xfc0007ff, 0xa00000c5, &CMP_UEQ_S        , 0,
19831        CP1_                },        /* CMP.UEQ.S */
19832     { instruction         , 0                   , 0   , 32,
19833        0xfc0007ff, 0xa0000105, &CMP_LT_S         , 0,
19834        CP1_                },        /* CMP.LT.S */
19835     { instruction         , 0                   , 0   , 32,
19836        0xfc0007ff, 0xa0000145, &CMP_ULT_S        , 0,
19837        CP1_                },        /* CMP.ULT.S */
19838     { instruction         , 0                   , 0   , 32,
19839        0xfc0007ff, 0xa0000185, &CMP_LE_S         , 0,
19840        CP1_                },        /* CMP.LE.S */
19841     { instruction         , 0                   , 0   , 32,
19842        0xfc0007ff, 0xa00001c5, &CMP_ULE_S        , 0,
19843        CP1_                },        /* CMP.ULE.S */
19844     { instruction         , 0                   , 0   , 32,
19845        0xfc0007ff, 0xa0000205, &CMP_SAF_S        , 0,
19846        CP1_                },        /* CMP.SAF.S */
19847     { instruction         , 0                   , 0   , 32,
19848        0xfc0007ff, 0xa0000245, &CMP_SUN_S        , 0,
19849        CP1_                },        /* CMP.SUN.S */
19850     { instruction         , 0                   , 0   , 32,
19851        0xfc0007ff, 0xa0000285, &CMP_SEQ_S        , 0,
19852        CP1_                },        /* CMP.SEQ.S */
19853     { instruction         , 0                   , 0   , 32,
19854        0xfc0007ff, 0xa00002c5, &CMP_SUEQ_S       , 0,
19855        CP1_                },        /* CMP.SUEQ.S */
19856     { instruction         , 0                   , 0   , 32,
19857        0xfc0007ff, 0xa0000305, &CMP_SLT_S        , 0,
19858        CP1_                },        /* CMP.SLT.S */
19859     { instruction         , 0                   , 0   , 32,
19860        0xfc0007ff, 0xa0000345, &CMP_SULT_S       , 0,
19861        CP1_                },        /* CMP.SULT.S */
19862     { instruction         , 0                   , 0   , 32,
19863        0xfc0007ff, 0xa0000385, &CMP_SLE_S        , 0,
19864        CP1_                },        /* CMP.SLE.S */
19865     { instruction         , 0                   , 0   , 32,
19866        0xfc0007ff, 0xa00003c5, &CMP_SULE_S       , 0,
19867        CP1_                },        /* CMP.SULE.S */
19868     { reserved_block      , 0                   , 0   , 32,
19869        0xfc0007ff, 0xa0000405, 0                      , 0,
19870        CP1_                },        /* CMP.condn.S~*(16) */
19871     { instruction         , 0                   , 0   , 32,
19872        0xfc0007ff, 0xa0000445, &CMP_OR_S         , 0,
19873        CP1_                },        /* CMP.OR.S */
19874     { instruction         , 0                   , 0   , 32,
19875        0xfc0007ff, 0xa0000485, &CMP_UNE_S        , 0,
19876        CP1_                },        /* CMP.UNE.S */
19877     { instruction         , 0                   , 0   , 32,
19878        0xfc0007ff, 0xa00004c5, &CMP_NE_S         , 0,
19879        CP1_                },        /* CMP.NE.S */
19880     { reserved_block      , 0                   , 0   , 32,
19881        0xfc0007ff, 0xa0000505, 0                      , 0,
19882        CP1_                },        /* CMP.condn.S~*(20) */
19883     { reserved_block      , 0                   , 0   , 32,
19884        0xfc0007ff, 0xa0000545, 0                      , 0,
19885        CP1_                },        /* CMP.condn.S~*(21) */
19886     { reserved_block      , 0                   , 0   , 32,
19887        0xfc0007ff, 0xa0000585, 0                      , 0,
19888        CP1_                },        /* CMP.condn.S~*(22) */
19889     { reserved_block      , 0                   , 0   , 32,
19890        0xfc0007ff, 0xa00005c5, 0                      , 0,
19891        CP1_                },        /* CMP.condn.S~*(23) */
19892     { reserved_block      , 0                   , 0   , 32,
19893        0xfc0007ff, 0xa0000605, 0                      , 0,
19894        CP1_                },        /* CMP.condn.S~*(24) */
19895     { instruction         , 0                   , 0   , 32,
19896        0xfc0007ff, 0xa0000645, &CMP_SOR_S        , 0,
19897        CP1_                },        /* CMP.SOR.S */
19898     { instruction         , 0                   , 0   , 32,
19899        0xfc0007ff, 0xa0000685, &CMP_SUNE_S       , 0,
19900        CP1_                },        /* CMP.SUNE.S */
19901     { instruction         , 0                   , 0   , 32,
19902        0xfc0007ff, 0xa00006c5, &CMP_SNE_S        , 0,
19903        CP1_                },        /* CMP.SNE.S */
19904     { reserved_block      , 0                   , 0   , 32,
19905        0xfc0007ff, 0xa0000705, 0                      , 0,
19906        CP1_                },        /* CMP.condn.S~*(28) */
19907     { reserved_block      , 0                   , 0   , 32,
19908        0xfc0007ff, 0xa0000745, 0                      , 0,
19909        CP1_                },        /* CMP.condn.S~*(29) */
19910     { reserved_block      , 0                   , 0   , 32,
19911        0xfc0007ff, 0xa0000785, 0                      , 0,
19912        CP1_                },        /* CMP.condn.S~*(30) */
19913     { reserved_block      , 0                   , 0   , 32,
19914        0xfc0007ff, 0xa00007c5, 0                      , 0,
19915        CP1_                },        /* CMP.condn.S~*(31) */
19916 };
19917 
19918 
19919 static const Pool CMP_condn_D[32] = {
19920     { instruction         , 0                   , 0   , 32,
19921        0xfc0007ff, 0xa0000015, &CMP_AF_D         , 0,
19922        CP1_                },        /* CMP.AF.D */
19923     { instruction         , 0                   , 0   , 32,
19924        0xfc0007ff, 0xa0000055, &CMP_UN_D         , 0,
19925        CP1_                },        /* CMP.UN.D */
19926     { instruction         , 0                   , 0   , 32,
19927        0xfc0007ff, 0xa0000095, &CMP_EQ_D         , 0,
19928        CP1_                },        /* CMP.EQ.D */
19929     { instruction         , 0                   , 0   , 32,
19930        0xfc0007ff, 0xa00000d5, &CMP_UEQ_D        , 0,
19931        CP1_                },        /* CMP.UEQ.D */
19932     { instruction         , 0                   , 0   , 32,
19933        0xfc0007ff, 0xa0000115, &CMP_LT_D         , 0,
19934        CP1_                },        /* CMP.LT.D */
19935     { instruction         , 0                   , 0   , 32,
19936        0xfc0007ff, 0xa0000155, &CMP_ULT_D        , 0,
19937        CP1_                },        /* CMP.ULT.D */
19938     { instruction         , 0                   , 0   , 32,
19939        0xfc0007ff, 0xa0000195, &CMP_LE_D         , 0,
19940        CP1_                },        /* CMP.LE.D */
19941     { instruction         , 0                   , 0   , 32,
19942        0xfc0007ff, 0xa00001d5, &CMP_ULE_D        , 0,
19943        CP1_                },        /* CMP.ULE.D */
19944     { instruction         , 0                   , 0   , 32,
19945        0xfc0007ff, 0xa0000215, &CMP_SAF_D        , 0,
19946        CP1_                },        /* CMP.SAF.D */
19947     { instruction         , 0                   , 0   , 32,
19948        0xfc0007ff, 0xa0000255, &CMP_SUN_D        , 0,
19949        CP1_                },        /* CMP.SUN.D */
19950     { instruction         , 0                   , 0   , 32,
19951        0xfc0007ff, 0xa0000295, &CMP_SEQ_D        , 0,
19952        CP1_                },        /* CMP.SEQ.D */
19953     { instruction         , 0                   , 0   , 32,
19954        0xfc0007ff, 0xa00002d5, &CMP_SUEQ_D       , 0,
19955        CP1_                },        /* CMP.SUEQ.D */
19956     { instruction         , 0                   , 0   , 32,
19957        0xfc0007ff, 0xa0000315, &CMP_SLT_D        , 0,
19958        CP1_                },        /* CMP.SLT.D */
19959     { instruction         , 0                   , 0   , 32,
19960        0xfc0007ff, 0xa0000355, &CMP_SULT_D       , 0,
19961        CP1_                },        /* CMP.SULT.D */
19962     { instruction         , 0                   , 0   , 32,
19963        0xfc0007ff, 0xa0000395, &CMP_SLE_D        , 0,
19964        CP1_                },        /* CMP.SLE.D */
19965     { instruction         , 0                   , 0   , 32,
19966        0xfc0007ff, 0xa00003d5, &CMP_SULE_D       , 0,
19967        CP1_                },        /* CMP.SULE.D */
19968     { reserved_block      , 0                   , 0   , 32,
19969        0xfc0007ff, 0xa0000415, 0                      , 0,
19970        CP1_                },        /* CMP.condn.D~*(16) */
19971     { instruction         , 0                   , 0   , 32,
19972        0xfc0007ff, 0xa0000455, &CMP_OR_D         , 0,
19973        CP1_                },        /* CMP.OR.D */
19974     { instruction         , 0                   , 0   , 32,
19975        0xfc0007ff, 0xa0000495, &CMP_UNE_D        , 0,
19976        CP1_                },        /* CMP.UNE.D */
19977     { instruction         , 0                   , 0   , 32,
19978        0xfc0007ff, 0xa00004d5, &CMP_NE_D         , 0,
19979        CP1_                },        /* CMP.NE.D */
19980     { reserved_block      , 0                   , 0   , 32,
19981        0xfc0007ff, 0xa0000515, 0                      , 0,
19982        CP1_                },        /* CMP.condn.D~*(20) */
19983     { reserved_block      , 0                   , 0   , 32,
19984        0xfc0007ff, 0xa0000555, 0                      , 0,
19985        CP1_                },        /* CMP.condn.D~*(21) */
19986     { reserved_block      , 0                   , 0   , 32,
19987        0xfc0007ff, 0xa0000595, 0                      , 0,
19988        CP1_                },        /* CMP.condn.D~*(22) */
19989     { reserved_block      , 0                   , 0   , 32,
19990        0xfc0007ff, 0xa00005d5, 0                      , 0,
19991        CP1_                },        /* CMP.condn.D~*(23) */
19992     { reserved_block      , 0                   , 0   , 32,
19993        0xfc0007ff, 0xa0000615, 0                      , 0,
19994        CP1_                },        /* CMP.condn.D~*(24) */
19995     { instruction         , 0                   , 0   , 32,
19996        0xfc0007ff, 0xa0000655, &CMP_SOR_D        , 0,
19997        CP1_                },        /* CMP.SOR.D */
19998     { instruction         , 0                   , 0   , 32,
19999        0xfc0007ff, 0xa0000695, &CMP_SUNE_D       , 0,
20000        CP1_                },        /* CMP.SUNE.D */
20001     { instruction         , 0                   , 0   , 32,
20002        0xfc0007ff, 0xa00006d5, &CMP_SNE_D        , 0,
20003        CP1_                },        /* CMP.SNE.D */
20004     { reserved_block      , 0                   , 0   , 32,
20005        0xfc0007ff, 0xa0000715, 0                      , 0,
20006        CP1_                },        /* CMP.condn.D~*(28) */
20007     { reserved_block      , 0                   , 0   , 32,
20008        0xfc0007ff, 0xa0000755, 0                      , 0,
20009        CP1_                },        /* CMP.condn.D~*(29) */
20010     { reserved_block      , 0                   , 0   , 32,
20011        0xfc0007ff, 0xa0000795, 0                      , 0,
20012        CP1_                },        /* CMP.condn.D~*(30) */
20013     { reserved_block      , 0                   , 0   , 32,
20014        0xfc0007ff, 0xa00007d5, 0                      , 0,
20015        CP1_                },        /* CMP.condn.D~*(31) */
20016 };
20017 
20018 
20019 static const Pool POOL32F_5[8] = {
20020     { pool                , CMP_condn_S         , 32  , 32,
20021        0xfc00003f, 0xa0000005, 0                      , 0,
20022        CP1_                },        /* CMP.condn.S */
20023     { reserved_block      , 0                   , 0   , 32,
20024        0xfc00003f, 0xa000000d, 0                      , 0,
20025        CP1_                },        /* POOL32F_5~*(1) */
20026     { pool                , CMP_condn_D         , 32  , 32,
20027        0xfc00003f, 0xa0000015, 0                      , 0,
20028        CP1_                },        /* CMP.condn.D */
20029     { reserved_block      , 0                   , 0   , 32,
20030        0xfc00003f, 0xa000001d, 0                      , 0,
20031        CP1_                },        /* POOL32F_5~*(3) */
20032     { reserved_block      , 0                   , 0   , 32,
20033        0xfc00003f, 0xa0000025, 0                      , 0,
20034        CP1_                },        /* POOL32F_5~*(4) */
20035     { reserved_block      , 0                   , 0   , 32,
20036        0xfc00003f, 0xa000002d, 0                      , 0,
20037        CP1_                },        /* POOL32F_5~*(5) */
20038     { reserved_block      , 0                   , 0   , 32,
20039        0xfc00003f, 0xa0000035, 0                      , 0,
20040        CP1_                },        /* POOL32F_5~*(6) */
20041     { reserved_block      , 0                   , 0   , 32,
20042        0xfc00003f, 0xa000003d, 0                      , 0,
20043        CP1_                },        /* POOL32F_5~*(7) */
20044 };
20045 
20046 
20047 static const Pool POOL32F[8] = {
20048     { pool                , POOL32F_0           , 64  , 32,
20049        0xfc000007, 0xa0000000, 0                      , 0,
20050        CP1_                },        /* POOL32F_0 */
20051     { reserved_block      , 0                   , 0   , 32,
20052        0xfc000007, 0xa0000001, 0                      , 0,
20053        CP1_                },        /* POOL32F~*(1) */
20054     { reserved_block      , 0                   , 0   , 32,
20055        0xfc000007, 0xa0000002, 0                      , 0,
20056        CP1_                },        /* POOL32F~*(2) */
20057     { pool                , POOL32F_3           , 8   , 32,
20058        0xfc000007, 0xa0000003, 0                      , 0,
20059        CP1_                },        /* POOL32F_3 */
20060     { reserved_block      , 0                   , 0   , 32,
20061        0xfc000007, 0xa0000004, 0                      , 0,
20062        CP1_                },        /* POOL32F~*(4) */
20063     { pool                , POOL32F_5           , 8   , 32,
20064        0xfc000007, 0xa0000005, 0                      , 0,
20065        CP1_                },        /* POOL32F_5 */
20066     { reserved_block      , 0                   , 0   , 32,
20067        0xfc000007, 0xa0000006, 0                      , 0,
20068        CP1_                },        /* POOL32F~*(6) */
20069     { reserved_block      , 0                   , 0   , 32,
20070        0xfc000007, 0xa0000007, 0                      , 0,
20071        CP1_                },        /* POOL32F~*(7) */
20072 };
20073 
20074 
20075 static const Pool POOL32S_0[64] = {
20076     { reserved_block      , 0                   , 0   , 32,
20077        0xfc0001ff, 0xc0000000, 0                      , 0,
20078        0x0                 },        /* POOL32S_0~*(0) */
20079     { instruction         , 0                   , 0   , 32,
20080        0xfc0001ff, 0xc0000008, &DLSA             , 0,
20081        MIPS64_             },        /* DLSA */
20082     { instruction         , 0                   , 0   , 32,
20083        0xfc0001ff, 0xc0000010, &DSLLV            , 0,
20084        MIPS64_             },        /* DSLLV */
20085     { instruction         , 0                   , 0   , 32,
20086        0xfc0001ff, 0xc0000018, &DMUL             , 0,
20087        MIPS64_             },        /* DMUL */
20088     { reserved_block      , 0                   , 0   , 32,
20089        0xfc0001ff, 0xc0000020, 0                      , 0,
20090        0x0                 },        /* POOL32S_0~*(4) */
20091     { reserved_block      , 0                   , 0   , 32,
20092        0xfc0001ff, 0xc0000028, 0                      , 0,
20093        0x0                 },        /* POOL32S_0~*(5) */
20094     { reserved_block      , 0                   , 0   , 32,
20095        0xfc0001ff, 0xc0000030, 0                      , 0,
20096        0x0                 },        /* POOL32S_0~*(6) */
20097     { reserved_block      , 0                   , 0   , 32,
20098        0xfc0001ff, 0xc0000038, 0                      , 0,
20099        0x0                 },        /* POOL32S_0~*(7) */
20100     { reserved_block      , 0                   , 0   , 32,
20101        0xfc0001ff, 0xc0000040, 0                      , 0,
20102        0x0                 },        /* POOL32S_0~*(8) */
20103     { reserved_block      , 0                   , 0   , 32,
20104        0xfc0001ff, 0xc0000048, 0                      , 0,
20105        0x0                 },        /* POOL32S_0~*(9) */
20106     { instruction         , 0                   , 0   , 32,
20107        0xfc0001ff, 0xc0000050, &DSRLV            , 0,
20108        MIPS64_             },        /* DSRLV */
20109     { instruction         , 0                   , 0   , 32,
20110        0xfc0001ff, 0xc0000058, &DMUH             , 0,
20111        MIPS64_             },        /* DMUH */
20112     { reserved_block      , 0                   , 0   , 32,
20113        0xfc0001ff, 0xc0000060, 0                      , 0,
20114        0x0                 },        /* POOL32S_0~*(12) */
20115     { reserved_block      , 0                   , 0   , 32,
20116        0xfc0001ff, 0xc0000068, 0                      , 0,
20117        0x0                 },        /* POOL32S_0~*(13) */
20118     { reserved_block      , 0                   , 0   , 32,
20119        0xfc0001ff, 0xc0000070, 0                      , 0,
20120        0x0                 },        /* POOL32S_0~*(14) */
20121     { reserved_block      , 0                   , 0   , 32,
20122        0xfc0001ff, 0xc0000078, 0                      , 0,
20123        0x0                 },        /* POOL32S_0~*(15) */
20124     { reserved_block      , 0                   , 0   , 32,
20125        0xfc0001ff, 0xc0000080, 0                      , 0,
20126        0x0                 },        /* POOL32S_0~*(16) */
20127     { reserved_block      , 0                   , 0   , 32,
20128        0xfc0001ff, 0xc0000088, 0                      , 0,
20129        0x0                 },        /* POOL32S_0~*(17) */
20130     { instruction         , 0                   , 0   , 32,
20131        0xfc0001ff, 0xc0000090, &DSRAV            , 0,
20132        MIPS64_             },        /* DSRAV */
20133     { instruction         , 0                   , 0   , 32,
20134        0xfc0001ff, 0xc0000098, &DMULU            , 0,
20135        MIPS64_             },        /* DMULU */
20136     { reserved_block      , 0                   , 0   , 32,
20137        0xfc0001ff, 0xc00000a0, 0                      , 0,
20138        0x0                 },        /* POOL32S_0~*(20) */
20139     { reserved_block      , 0                   , 0   , 32,
20140        0xfc0001ff, 0xc00000a8, 0                      , 0,
20141        0x0                 },        /* POOL32S_0~*(21) */
20142     { reserved_block      , 0                   , 0   , 32,
20143        0xfc0001ff, 0xc00000b0, 0                      , 0,
20144        0x0                 },        /* POOL32S_0~*(22) */
20145     { reserved_block      , 0                   , 0   , 32,
20146        0xfc0001ff, 0xc00000b8, 0                      , 0,
20147        0x0                 },        /* POOL32S_0~*(23) */
20148     { reserved_block      , 0                   , 0   , 32,
20149        0xfc0001ff, 0xc00000c0, 0                      , 0,
20150        0x0                 },        /* POOL32S_0~*(24) */
20151     { reserved_block      , 0                   , 0   , 32,
20152        0xfc0001ff, 0xc00000c8, 0                      , 0,
20153        0x0                 },        /* POOL32S_0~*(25) */
20154     { instruction         , 0                   , 0   , 32,
20155        0xfc0001ff, 0xc00000d0, &DROTRV           , 0,
20156        MIPS64_             },        /* DROTRV */
20157     { instruction         , 0                   , 0   , 32,
20158        0xfc0001ff, 0xc00000d8, &DMUHU            , 0,
20159        MIPS64_             },        /* DMUHU */
20160     { reserved_block      , 0                   , 0   , 32,
20161        0xfc0001ff, 0xc00000e0, 0                      , 0,
20162        0x0                 },        /* POOL32S_0~*(28) */
20163     { reserved_block      , 0                   , 0   , 32,
20164        0xfc0001ff, 0xc00000e8, 0                      , 0,
20165        0x0                 },        /* POOL32S_0~*(29) */
20166     { reserved_block      , 0                   , 0   , 32,
20167        0xfc0001ff, 0xc00000f0, 0                      , 0,
20168        0x0                 },        /* POOL32S_0~*(30) */
20169     { reserved_block      , 0                   , 0   , 32,
20170        0xfc0001ff, 0xc00000f8, 0                      , 0,
20171        0x0                 },        /* POOL32S_0~*(31) */
20172     { reserved_block      , 0                   , 0   , 32,
20173        0xfc0001ff, 0xc0000100, 0                      , 0,
20174        0x0                 },        /* POOL32S_0~*(32) */
20175     { reserved_block      , 0                   , 0   , 32,
20176        0xfc0001ff, 0xc0000108, 0                      , 0,
20177        0x0                 },        /* POOL32S_0~*(33) */
20178     { instruction         , 0                   , 0   , 32,
20179        0xfc0001ff, 0xc0000110, &DADD             , 0,
20180        MIPS64_             },        /* DADD */
20181     { instruction         , 0                   , 0   , 32,
20182        0xfc0001ff, 0xc0000118, &DDIV             , 0,
20183        MIPS64_             },        /* DDIV */
20184     { reserved_block      , 0                   , 0   , 32,
20185        0xfc0001ff, 0xc0000120, 0                      , 0,
20186        0x0                 },        /* POOL32S_0~*(36) */
20187     { reserved_block      , 0                   , 0   , 32,
20188        0xfc0001ff, 0xc0000128, 0                      , 0,
20189        0x0                 },        /* POOL32S_0~*(37) */
20190     { reserved_block      , 0                   , 0   , 32,
20191        0xfc0001ff, 0xc0000130, 0                      , 0,
20192        0x0                 },        /* POOL32S_0~*(38) */
20193     { reserved_block      , 0                   , 0   , 32,
20194        0xfc0001ff, 0xc0000138, 0                      , 0,
20195        0x0                 },        /* POOL32S_0~*(39) */
20196     { reserved_block      , 0                   , 0   , 32,
20197        0xfc0001ff, 0xc0000140, 0                      , 0,
20198        0x0                 },        /* POOL32S_0~*(40) */
20199     { reserved_block      , 0                   , 0   , 32,
20200        0xfc0001ff, 0xc0000148, 0                      , 0,
20201        0x0                 },        /* POOL32S_0~*(41) */
20202     { instruction         , 0                   , 0   , 32,
20203        0xfc0001ff, 0xc0000150, &DADDU            , 0,
20204        MIPS64_             },        /* DADDU */
20205     { instruction         , 0                   , 0   , 32,
20206        0xfc0001ff, 0xc0000158, &DMOD             , 0,
20207        MIPS64_             },        /* DMOD */
20208     { reserved_block      , 0                   , 0   , 32,
20209        0xfc0001ff, 0xc0000160, 0                      , 0,
20210        0x0                 },        /* POOL32S_0~*(44) */
20211     { reserved_block      , 0                   , 0   , 32,
20212        0xfc0001ff, 0xc0000168, 0                      , 0,
20213        0x0                 },        /* POOL32S_0~*(45) */
20214     { reserved_block      , 0                   , 0   , 32,
20215        0xfc0001ff, 0xc0000170, 0                      , 0,
20216        0x0                 },        /* POOL32S_0~*(46) */
20217     { reserved_block      , 0                   , 0   , 32,
20218        0xfc0001ff, 0xc0000178, 0                      , 0,
20219        0x0                 },        /* POOL32S_0~*(47) */
20220     { reserved_block      , 0                   , 0   , 32,
20221        0xfc0001ff, 0xc0000180, 0                      , 0,
20222        0x0                 },        /* POOL32S_0~*(48) */
20223     { reserved_block      , 0                   , 0   , 32,
20224        0xfc0001ff, 0xc0000188, 0                      , 0,
20225        0x0                 },        /* POOL32S_0~*(49) */
20226     { instruction         , 0                   , 0   , 32,
20227        0xfc0001ff, 0xc0000190, &DSUB             , 0,
20228        MIPS64_             },        /* DSUB */
20229     { instruction         , 0                   , 0   , 32,
20230        0xfc0001ff, 0xc0000198, &DDIVU            , 0,
20231        MIPS64_             },        /* DDIVU */
20232     { reserved_block      , 0                   , 0   , 32,
20233        0xfc0001ff, 0xc00001a0, 0                      , 0,
20234        0x0                 },        /* POOL32S_0~*(52) */
20235     { reserved_block      , 0                   , 0   , 32,
20236        0xfc0001ff, 0xc00001a8, 0                      , 0,
20237        0x0                 },        /* POOL32S_0~*(53) */
20238     { reserved_block      , 0                   , 0   , 32,
20239        0xfc0001ff, 0xc00001b0, 0                      , 0,
20240        0x0                 },        /* POOL32S_0~*(54) */
20241     { reserved_block      , 0                   , 0   , 32,
20242        0xfc0001ff, 0xc00001b8, 0                      , 0,
20243        0x0                 },        /* POOL32S_0~*(55) */
20244     { reserved_block      , 0                   , 0   , 32,
20245        0xfc0001ff, 0xc00001c0, 0                      , 0,
20246        0x0                 },        /* POOL32S_0~*(56) */
20247     { reserved_block      , 0                   , 0   , 32,
20248        0xfc0001ff, 0xc00001c8, 0                      , 0,
20249        0x0                 },        /* POOL32S_0~*(57) */
20250     { instruction         , 0                   , 0   , 32,
20251        0xfc0001ff, 0xc00001d0, &DSUBU            , 0,
20252        MIPS64_             },        /* DSUBU */
20253     { instruction         , 0                   , 0   , 32,
20254        0xfc0001ff, 0xc00001d8, &DMODU            , 0,
20255        MIPS64_             },        /* DMODU */
20256     { reserved_block      , 0                   , 0   , 32,
20257        0xfc0001ff, 0xc00001e0, 0                      , 0,
20258        0x0                 },        /* POOL32S_0~*(60) */
20259     { reserved_block      , 0                   , 0   , 32,
20260        0xfc0001ff, 0xc00001e8, 0                      , 0,
20261        0x0                 },        /* POOL32S_0~*(61) */
20262     { reserved_block      , 0                   , 0   , 32,
20263        0xfc0001ff, 0xc00001f0, 0                      , 0,
20264        0x0                 },        /* POOL32S_0~*(62) */
20265     { reserved_block      , 0                   , 0   , 32,
20266        0xfc0001ff, 0xc00001f8, 0                      , 0,
20267        0x0                 },        /* POOL32S_0~*(63) */
20268 };
20269 
20270 
20271 static const Pool POOL32Sxf_4[128] = {
20272     { reserved_block      , 0                   , 0   , 32,
20273        0xfc00ffff, 0xc000013c, 0                      , 0,
20274        0x0                 },        /* POOL32Sxf_4~*(0) */
20275     { reserved_block      , 0                   , 0   , 32,
20276        0xfc00ffff, 0xc000033c, 0                      , 0,
20277        0x0                 },        /* POOL32Sxf_4~*(1) */
20278     { reserved_block      , 0                   , 0   , 32,
20279        0xfc00ffff, 0xc000053c, 0                      , 0,
20280        0x0                 },        /* POOL32Sxf_4~*(2) */
20281     { reserved_block      , 0                   , 0   , 32,
20282        0xfc00ffff, 0xc000073c, 0                      , 0,
20283        0x0                 },        /* POOL32Sxf_4~*(3) */
20284     { reserved_block      , 0                   , 0   , 32,
20285        0xfc00ffff, 0xc000093c, 0                      , 0,
20286        0x0                 },        /* POOL32Sxf_4~*(4) */
20287     { reserved_block      , 0                   , 0   , 32,
20288        0xfc00ffff, 0xc0000b3c, 0                      , 0,
20289        0x0                 },        /* POOL32Sxf_4~*(5) */
20290     { reserved_block      , 0                   , 0   , 32,
20291        0xfc00ffff, 0xc0000d3c, 0                      , 0,
20292        0x0                 },        /* POOL32Sxf_4~*(6) */
20293     { reserved_block      , 0                   , 0   , 32,
20294        0xfc00ffff, 0xc0000f3c, 0                      , 0,
20295        0x0                 },        /* POOL32Sxf_4~*(7) */
20296     { reserved_block      , 0                   , 0   , 32,
20297        0xfc00ffff, 0xc000113c, 0                      , 0,
20298        0x0                 },        /* POOL32Sxf_4~*(8) */
20299     { reserved_block      , 0                   , 0   , 32,
20300        0xfc00ffff, 0xc000133c, 0                      , 0,
20301        0x0                 },        /* POOL32Sxf_4~*(9) */
20302     { reserved_block      , 0                   , 0   , 32,
20303        0xfc00ffff, 0xc000153c, 0                      , 0,
20304        0x0                 },        /* POOL32Sxf_4~*(10) */
20305     { reserved_block      , 0                   , 0   , 32,
20306        0xfc00ffff, 0xc000173c, 0                      , 0,
20307        0x0                 },        /* POOL32Sxf_4~*(11) */
20308     { reserved_block      , 0                   , 0   , 32,
20309        0xfc00ffff, 0xc000193c, 0                      , 0,
20310        0x0                 },        /* POOL32Sxf_4~*(12) */
20311     { reserved_block      , 0                   , 0   , 32,
20312        0xfc00ffff, 0xc0001b3c, 0                      , 0,
20313        0x0                 },        /* POOL32Sxf_4~*(13) */
20314     { reserved_block      , 0                   , 0   , 32,
20315        0xfc00ffff, 0xc0001d3c, 0                      , 0,
20316        0x0                 },        /* POOL32Sxf_4~*(14) */
20317     { reserved_block      , 0                   , 0   , 32,
20318        0xfc00ffff, 0xc0001f3c, 0                      , 0,
20319        0x0                 },        /* POOL32Sxf_4~*(15) */
20320     { reserved_block      , 0                   , 0   , 32,
20321        0xfc00ffff, 0xc000213c, 0                      , 0,
20322        0x0                 },        /* POOL32Sxf_4~*(16) */
20323     { reserved_block      , 0                   , 0   , 32,
20324        0xfc00ffff, 0xc000233c, 0                      , 0,
20325        0x0                 },        /* POOL32Sxf_4~*(17) */
20326     { reserved_block      , 0                   , 0   , 32,
20327        0xfc00ffff, 0xc000253c, 0                      , 0,
20328        0x0                 },        /* POOL32Sxf_4~*(18) */
20329     { reserved_block      , 0                   , 0   , 32,
20330        0xfc00ffff, 0xc000273c, 0                      , 0,
20331        0x0                 },        /* POOL32Sxf_4~*(19) */
20332     { reserved_block      , 0                   , 0   , 32,
20333        0xfc00ffff, 0xc000293c, 0                      , 0,
20334        0x0                 },        /* POOL32Sxf_4~*(20) */
20335     { reserved_block      , 0                   , 0   , 32,
20336        0xfc00ffff, 0xc0002b3c, 0                      , 0,
20337        0x0                 },        /* POOL32Sxf_4~*(21) */
20338     { reserved_block      , 0                   , 0   , 32,
20339        0xfc00ffff, 0xc0002d3c, 0                      , 0,
20340        0x0                 },        /* POOL32Sxf_4~*(22) */
20341     { reserved_block      , 0                   , 0   , 32,
20342        0xfc00ffff, 0xc0002f3c, 0                      , 0,
20343        0x0                 },        /* POOL32Sxf_4~*(23) */
20344     { reserved_block      , 0                   , 0   , 32,
20345        0xfc00ffff, 0xc000313c, 0                      , 0,
20346        0x0                 },        /* POOL32Sxf_4~*(24) */
20347     { reserved_block      , 0                   , 0   , 32,
20348        0xfc00ffff, 0xc000333c, 0                      , 0,
20349        0x0                 },        /* POOL32Sxf_4~*(25) */
20350     { reserved_block      , 0                   , 0   , 32,
20351        0xfc00ffff, 0xc000353c, 0                      , 0,
20352        0x0                 },        /* POOL32Sxf_4~*(26) */
20353     { reserved_block      , 0                   , 0   , 32,
20354        0xfc00ffff, 0xc000373c, 0                      , 0,
20355        0x0                 },        /* POOL32Sxf_4~*(27) */
20356     { reserved_block      , 0                   , 0   , 32,
20357        0xfc00ffff, 0xc000393c, 0                      , 0,
20358        0x0                 },        /* POOL32Sxf_4~*(28) */
20359     { reserved_block      , 0                   , 0   , 32,
20360        0xfc00ffff, 0xc0003b3c, 0                      , 0,
20361        0x0                 },        /* POOL32Sxf_4~*(29) */
20362     { reserved_block      , 0                   , 0   , 32,
20363        0xfc00ffff, 0xc0003d3c, 0                      , 0,
20364        0x0                 },        /* POOL32Sxf_4~*(30) */
20365     { reserved_block      , 0                   , 0   , 32,
20366        0xfc00ffff, 0xc0003f3c, 0                      , 0,
20367        0x0                 },        /* POOL32Sxf_4~*(31) */
20368     { reserved_block      , 0                   , 0   , 32,
20369        0xfc00ffff, 0xc000413c, 0                      , 0,
20370        0x0                 },        /* POOL32Sxf_4~*(32) */
20371     { reserved_block      , 0                   , 0   , 32,
20372        0xfc00ffff, 0xc000433c, 0                      , 0,
20373        0x0                 },        /* POOL32Sxf_4~*(33) */
20374     { reserved_block      , 0                   , 0   , 32,
20375        0xfc00ffff, 0xc000453c, 0                      , 0,
20376        0x0                 },        /* POOL32Sxf_4~*(34) */
20377     { reserved_block      , 0                   , 0   , 32,
20378        0xfc00ffff, 0xc000473c, 0                      , 0,
20379        0x0                 },        /* POOL32Sxf_4~*(35) */
20380     { reserved_block      , 0                   , 0   , 32,
20381        0xfc00ffff, 0xc000493c, 0                      , 0,
20382        0x0                 },        /* POOL32Sxf_4~*(36) */
20383     { instruction         , 0                   , 0   , 32,
20384        0xfc00ffff, 0xc0004b3c, &DCLO             , 0,
20385        MIPS64_             },        /* DCLO */
20386     { reserved_block      , 0                   , 0   , 32,
20387        0xfc00ffff, 0xc0004d3c, 0                      , 0,
20388        0x0                 },        /* POOL32Sxf_4~*(38) */
20389     { reserved_block      , 0                   , 0   , 32,
20390        0xfc00ffff, 0xc0004f3c, 0                      , 0,
20391        0x0                 },        /* POOL32Sxf_4~*(39) */
20392     { reserved_block      , 0                   , 0   , 32,
20393        0xfc00ffff, 0xc000513c, 0                      , 0,
20394        0x0                 },        /* POOL32Sxf_4~*(40) */
20395     { reserved_block      , 0                   , 0   , 32,
20396        0xfc00ffff, 0xc000533c, 0                      , 0,
20397        0x0                 },        /* POOL32Sxf_4~*(41) */
20398     { reserved_block      , 0                   , 0   , 32,
20399        0xfc00ffff, 0xc000553c, 0                      , 0,
20400        0x0                 },        /* POOL32Sxf_4~*(42) */
20401     { reserved_block      , 0                   , 0   , 32,
20402        0xfc00ffff, 0xc000573c, 0                      , 0,
20403        0x0                 },        /* POOL32Sxf_4~*(43) */
20404     { reserved_block      , 0                   , 0   , 32,
20405        0xfc00ffff, 0xc000593c, 0                      , 0,
20406        0x0                 },        /* POOL32Sxf_4~*(44) */
20407     { instruction         , 0                   , 0   , 32,
20408        0xfc00ffff, 0xc0005b3c, &DCLZ             , 0,
20409        MIPS64_             },        /* DCLZ */
20410     { reserved_block      , 0                   , 0   , 32,
20411        0xfc00ffff, 0xc0005d3c, 0                      , 0,
20412        0x0                 },        /* POOL32Sxf_4~*(46) */
20413     { reserved_block      , 0                   , 0   , 32,
20414        0xfc00ffff, 0xc0005f3c, 0                      , 0,
20415        0x0                 },        /* POOL32Sxf_4~*(47) */
20416     { reserved_block      , 0                   , 0   , 32,
20417        0xfc00ffff, 0xc000613c, 0                      , 0,
20418        0x0                 },        /* POOL32Sxf_4~*(48) */
20419     { reserved_block      , 0                   , 0   , 32,
20420        0xfc00ffff, 0xc000633c, 0                      , 0,
20421        0x0                 },        /* POOL32Sxf_4~*(49) */
20422     { reserved_block      , 0                   , 0   , 32,
20423        0xfc00ffff, 0xc000653c, 0                      , 0,
20424        0x0                 },        /* POOL32Sxf_4~*(50) */
20425     { reserved_block      , 0                   , 0   , 32,
20426        0xfc00ffff, 0xc000673c, 0                      , 0,
20427        0x0                 },        /* POOL32Sxf_4~*(51) */
20428     { reserved_block      , 0                   , 0   , 32,
20429        0xfc00ffff, 0xc000693c, 0                      , 0,
20430        0x0                 },        /* POOL32Sxf_4~*(52) */
20431     { reserved_block      , 0                   , 0   , 32,
20432        0xfc00ffff, 0xc0006b3c, 0                      , 0,
20433        0x0                 },        /* POOL32Sxf_4~*(53) */
20434     { reserved_block      , 0                   , 0   , 32,
20435        0xfc00ffff, 0xc0006d3c, 0                      , 0,
20436        0x0                 },        /* POOL32Sxf_4~*(54) */
20437     { reserved_block      , 0                   , 0   , 32,
20438        0xfc00ffff, 0xc0006f3c, 0                      , 0,
20439        0x0                 },        /* POOL32Sxf_4~*(55) */
20440     { reserved_block      , 0                   , 0   , 32,
20441        0xfc00ffff, 0xc000713c, 0                      , 0,
20442        0x0                 },        /* POOL32Sxf_4~*(56) */
20443     { reserved_block      , 0                   , 0   , 32,
20444        0xfc00ffff, 0xc000733c, 0                      , 0,
20445        0x0                 },        /* POOL32Sxf_4~*(57) */
20446     { reserved_block      , 0                   , 0   , 32,
20447        0xfc00ffff, 0xc000753c, 0                      , 0,
20448        0x0                 },        /* POOL32Sxf_4~*(58) */
20449     { reserved_block      , 0                   , 0   , 32,
20450        0xfc00ffff, 0xc000773c, 0                      , 0,
20451        0x0                 },        /* POOL32Sxf_4~*(59) */
20452     { reserved_block      , 0                   , 0   , 32,
20453        0xfc00ffff, 0xc000793c, 0                      , 0,
20454        0x0                 },        /* POOL32Sxf_4~*(60) */
20455     { reserved_block      , 0                   , 0   , 32,
20456        0xfc00ffff, 0xc0007b3c, 0                      , 0,
20457        0x0                 },        /* POOL32Sxf_4~*(61) */
20458     { reserved_block      , 0                   , 0   , 32,
20459        0xfc00ffff, 0xc0007d3c, 0                      , 0,
20460        0x0                 },        /* POOL32Sxf_4~*(62) */
20461     { reserved_block      , 0                   , 0   , 32,
20462        0xfc00ffff, 0xc0007f3c, 0                      , 0,
20463        0x0                 },        /* POOL32Sxf_4~*(63) */
20464     { reserved_block      , 0                   , 0   , 32,
20465        0xfc00ffff, 0xc000813c, 0                      , 0,
20466        0x0                 },        /* POOL32Sxf_4~*(64) */
20467     { reserved_block      , 0                   , 0   , 32,
20468        0xfc00ffff, 0xc000833c, 0                      , 0,
20469        0x0                 },        /* POOL32Sxf_4~*(65) */
20470     { reserved_block      , 0                   , 0   , 32,
20471        0xfc00ffff, 0xc000853c, 0                      , 0,
20472        0x0                 },        /* POOL32Sxf_4~*(66) */
20473     { reserved_block      , 0                   , 0   , 32,
20474        0xfc00ffff, 0xc000873c, 0                      , 0,
20475        0x0                 },        /* POOL32Sxf_4~*(67) */
20476     { reserved_block      , 0                   , 0   , 32,
20477        0xfc00ffff, 0xc000893c, 0                      , 0,
20478        0x0                 },        /* POOL32Sxf_4~*(68) */
20479     { reserved_block      , 0                   , 0   , 32,
20480        0xfc00ffff, 0xc0008b3c, 0                      , 0,
20481        0x0                 },        /* POOL32Sxf_4~*(69) */
20482     { reserved_block      , 0                   , 0   , 32,
20483        0xfc00ffff, 0xc0008d3c, 0                      , 0,
20484        0x0                 },        /* POOL32Sxf_4~*(70) */
20485     { reserved_block      , 0                   , 0   , 32,
20486        0xfc00ffff, 0xc0008f3c, 0                      , 0,
20487        0x0                 },        /* POOL32Sxf_4~*(71) */
20488     { reserved_block      , 0                   , 0   , 32,
20489        0xfc00ffff, 0xc000913c, 0                      , 0,
20490        0x0                 },        /* POOL32Sxf_4~*(72) */
20491     { reserved_block      , 0                   , 0   , 32,
20492        0xfc00ffff, 0xc000933c, 0                      , 0,
20493        0x0                 },        /* POOL32Sxf_4~*(73) */
20494     { reserved_block      , 0                   , 0   , 32,
20495        0xfc00ffff, 0xc000953c, 0                      , 0,
20496        0x0                 },        /* POOL32Sxf_4~*(74) */
20497     { reserved_block      , 0                   , 0   , 32,
20498        0xfc00ffff, 0xc000973c, 0                      , 0,
20499        0x0                 },        /* POOL32Sxf_4~*(75) */
20500     { reserved_block      , 0                   , 0   , 32,
20501        0xfc00ffff, 0xc000993c, 0                      , 0,
20502        0x0                 },        /* POOL32Sxf_4~*(76) */
20503     { reserved_block      , 0                   , 0   , 32,
20504        0xfc00ffff, 0xc0009b3c, 0                      , 0,
20505        0x0                 },        /* POOL32Sxf_4~*(77) */
20506     { reserved_block      , 0                   , 0   , 32,
20507        0xfc00ffff, 0xc0009d3c, 0                      , 0,
20508        0x0                 },        /* POOL32Sxf_4~*(78) */
20509     { reserved_block      , 0                   , 0   , 32,
20510        0xfc00ffff, 0xc0009f3c, 0                      , 0,
20511        0x0                 },        /* POOL32Sxf_4~*(79) */
20512     { reserved_block      , 0                   , 0   , 32,
20513        0xfc00ffff, 0xc000a13c, 0                      , 0,
20514        0x0                 },        /* POOL32Sxf_4~*(80) */
20515     { reserved_block      , 0                   , 0   , 32,
20516        0xfc00ffff, 0xc000a33c, 0                      , 0,
20517        0x0                 },        /* POOL32Sxf_4~*(81) */
20518     { reserved_block      , 0                   , 0   , 32,
20519        0xfc00ffff, 0xc000a53c, 0                      , 0,
20520        0x0                 },        /* POOL32Sxf_4~*(82) */
20521     { reserved_block      , 0                   , 0   , 32,
20522        0xfc00ffff, 0xc000a73c, 0                      , 0,
20523        0x0                 },        /* POOL32Sxf_4~*(83) */
20524     { reserved_block      , 0                   , 0   , 32,
20525        0xfc00ffff, 0xc000a93c, 0                      , 0,
20526        0x0                 },        /* POOL32Sxf_4~*(84) */
20527     { reserved_block      , 0                   , 0   , 32,
20528        0xfc00ffff, 0xc000ab3c, 0                      , 0,
20529        0x0                 },        /* POOL32Sxf_4~*(85) */
20530     { reserved_block      , 0                   , 0   , 32,
20531        0xfc00ffff, 0xc000ad3c, 0                      , 0,
20532        0x0                 },        /* POOL32Sxf_4~*(86) */
20533     { reserved_block      , 0                   , 0   , 32,
20534        0xfc00ffff, 0xc000af3c, 0                      , 0,
20535        0x0                 },        /* POOL32Sxf_4~*(87) */
20536     { reserved_block      , 0                   , 0   , 32,
20537        0xfc00ffff, 0xc000b13c, 0                      , 0,
20538        0x0                 },        /* POOL32Sxf_4~*(88) */
20539     { reserved_block      , 0                   , 0   , 32,
20540        0xfc00ffff, 0xc000b33c, 0                      , 0,
20541        0x0                 },        /* POOL32Sxf_4~*(89) */
20542     { reserved_block      , 0                   , 0   , 32,
20543        0xfc00ffff, 0xc000b53c, 0                      , 0,
20544        0x0                 },        /* POOL32Sxf_4~*(90) */
20545     { reserved_block      , 0                   , 0   , 32,
20546        0xfc00ffff, 0xc000b73c, 0                      , 0,
20547        0x0                 },        /* POOL32Sxf_4~*(91) */
20548     { reserved_block      , 0                   , 0   , 32,
20549        0xfc00ffff, 0xc000b93c, 0                      , 0,
20550        0x0                 },        /* POOL32Sxf_4~*(92) */
20551     { reserved_block      , 0                   , 0   , 32,
20552        0xfc00ffff, 0xc000bb3c, 0                      , 0,
20553        0x0                 },        /* POOL32Sxf_4~*(93) */
20554     { reserved_block      , 0                   , 0   , 32,
20555        0xfc00ffff, 0xc000bd3c, 0                      , 0,
20556        0x0                 },        /* POOL32Sxf_4~*(94) */
20557     { reserved_block      , 0                   , 0   , 32,
20558        0xfc00ffff, 0xc000bf3c, 0                      , 0,
20559        0x0                 },        /* POOL32Sxf_4~*(95) */
20560     { reserved_block      , 0                   , 0   , 32,
20561        0xfc00ffff, 0xc000c13c, 0                      , 0,
20562        0x0                 },        /* POOL32Sxf_4~*(96) */
20563     { reserved_block      , 0                   , 0   , 32,
20564        0xfc00ffff, 0xc000c33c, 0                      , 0,
20565        0x0                 },        /* POOL32Sxf_4~*(97) */
20566     { reserved_block      , 0                   , 0   , 32,
20567        0xfc00ffff, 0xc000c53c, 0                      , 0,
20568        0x0                 },        /* POOL32Sxf_4~*(98) */
20569     { reserved_block      , 0                   , 0   , 32,
20570        0xfc00ffff, 0xc000c73c, 0                      , 0,
20571        0x0                 },        /* POOL32Sxf_4~*(99) */
20572     { reserved_block      , 0                   , 0   , 32,
20573        0xfc00ffff, 0xc000c93c, 0                      , 0,
20574        0x0                 },        /* POOL32Sxf_4~*(100) */
20575     { reserved_block      , 0                   , 0   , 32,
20576        0xfc00ffff, 0xc000cb3c, 0                      , 0,
20577        0x0                 },        /* POOL32Sxf_4~*(101) */
20578     { reserved_block      , 0                   , 0   , 32,
20579        0xfc00ffff, 0xc000cd3c, 0                      , 0,
20580        0x0                 },        /* POOL32Sxf_4~*(102) */
20581     { reserved_block      , 0                   , 0   , 32,
20582        0xfc00ffff, 0xc000cf3c, 0                      , 0,
20583        0x0                 },        /* POOL32Sxf_4~*(103) */
20584     { reserved_block      , 0                   , 0   , 32,
20585        0xfc00ffff, 0xc000d13c, 0                      , 0,
20586        0x0                 },        /* POOL32Sxf_4~*(104) */
20587     { reserved_block      , 0                   , 0   , 32,
20588        0xfc00ffff, 0xc000d33c, 0                      , 0,
20589        0x0                 },        /* POOL32Sxf_4~*(105) */
20590     { reserved_block      , 0                   , 0   , 32,
20591        0xfc00ffff, 0xc000d53c, 0                      , 0,
20592        0x0                 },        /* POOL32Sxf_4~*(106) */
20593     { reserved_block      , 0                   , 0   , 32,
20594        0xfc00ffff, 0xc000d73c, 0                      , 0,
20595        0x0                 },        /* POOL32Sxf_4~*(107) */
20596     { reserved_block      , 0                   , 0   , 32,
20597        0xfc00ffff, 0xc000d93c, 0                      , 0,
20598        0x0                 },        /* POOL32Sxf_4~*(108) */
20599     { reserved_block      , 0                   , 0   , 32,
20600        0xfc00ffff, 0xc000db3c, 0                      , 0,
20601        0x0                 },        /* POOL32Sxf_4~*(109) */
20602     { reserved_block      , 0                   , 0   , 32,
20603        0xfc00ffff, 0xc000dd3c, 0                      , 0,
20604        0x0                 },        /* POOL32Sxf_4~*(110) */
20605     { reserved_block      , 0                   , 0   , 32,
20606        0xfc00ffff, 0xc000df3c, 0                      , 0,
20607        0x0                 },        /* POOL32Sxf_4~*(111) */
20608     { reserved_block      , 0                   , 0   , 32,
20609        0xfc00ffff, 0xc000e13c, 0                      , 0,
20610        0x0                 },        /* POOL32Sxf_4~*(112) */
20611     { reserved_block      , 0                   , 0   , 32,
20612        0xfc00ffff, 0xc000e33c, 0                      , 0,
20613        0x0                 },        /* POOL32Sxf_4~*(113) */
20614     { reserved_block      , 0                   , 0   , 32,
20615        0xfc00ffff, 0xc000e53c, 0                      , 0,
20616        0x0                 },        /* POOL32Sxf_4~*(114) */
20617     { reserved_block      , 0                   , 0   , 32,
20618        0xfc00ffff, 0xc000e73c, 0                      , 0,
20619        0x0                 },        /* POOL32Sxf_4~*(115) */
20620     { reserved_block      , 0                   , 0   , 32,
20621        0xfc00ffff, 0xc000e93c, 0                      , 0,
20622        0x0                 },        /* POOL32Sxf_4~*(116) */
20623     { reserved_block      , 0                   , 0   , 32,
20624        0xfc00ffff, 0xc000eb3c, 0                      , 0,
20625        0x0                 },        /* POOL32Sxf_4~*(117) */
20626     { reserved_block      , 0                   , 0   , 32,
20627        0xfc00ffff, 0xc000ed3c, 0                      , 0,
20628        0x0                 },        /* POOL32Sxf_4~*(118) */
20629     { reserved_block      , 0                   , 0   , 32,
20630        0xfc00ffff, 0xc000ef3c, 0                      , 0,
20631        0x0                 },        /* POOL32Sxf_4~*(119) */
20632     { reserved_block      , 0                   , 0   , 32,
20633        0xfc00ffff, 0xc000f13c, 0                      , 0,
20634        0x0                 },        /* POOL32Sxf_4~*(120) */
20635     { reserved_block      , 0                   , 0   , 32,
20636        0xfc00ffff, 0xc000f33c, 0                      , 0,
20637        0x0                 },        /* POOL32Sxf_4~*(121) */
20638     { reserved_block      , 0                   , 0   , 32,
20639        0xfc00ffff, 0xc000f53c, 0                      , 0,
20640        0x0                 },        /* POOL32Sxf_4~*(122) */
20641     { reserved_block      , 0                   , 0   , 32,
20642        0xfc00ffff, 0xc000f73c, 0                      , 0,
20643        0x0                 },        /* POOL32Sxf_4~*(123) */
20644     { reserved_block      , 0                   , 0   , 32,
20645        0xfc00ffff, 0xc000f93c, 0                      , 0,
20646        0x0                 },        /* POOL32Sxf_4~*(124) */
20647     { reserved_block      , 0                   , 0   , 32,
20648        0xfc00ffff, 0xc000fb3c, 0                      , 0,
20649        0x0                 },        /* POOL32Sxf_4~*(125) */
20650     { reserved_block      , 0                   , 0   , 32,
20651        0xfc00ffff, 0xc000fd3c, 0                      , 0,
20652        0x0                 },        /* POOL32Sxf_4~*(126) */
20653     { reserved_block      , 0                   , 0   , 32,
20654        0xfc00ffff, 0xc000ff3c, 0                      , 0,
20655        0x0                 },        /* POOL32Sxf_4~*(127) */
20656 };
20657 
20658 
20659 static const Pool POOL32Sxf[8] = {
20660     { reserved_block      , 0                   , 0   , 32,
20661        0xfc0001ff, 0xc000003c, 0                      , 0,
20662        0x0                 },        /* POOL32Sxf~*(0) */
20663     { reserved_block      , 0                   , 0   , 32,
20664        0xfc0001ff, 0xc000007c, 0                      , 0,
20665        0x0                 },        /* POOL32Sxf~*(1) */
20666     { reserved_block      , 0                   , 0   , 32,
20667        0xfc0001ff, 0xc00000bc, 0                      , 0,
20668        0x0                 },        /* POOL32Sxf~*(2) */
20669     { reserved_block      , 0                   , 0   , 32,
20670        0xfc0001ff, 0xc00000fc, 0                      , 0,
20671        0x0                 },        /* POOL32Sxf~*(3) */
20672     { pool                , POOL32Sxf_4         , 128 , 32,
20673        0xfc0001ff, 0xc000013c, 0                      , 0,
20674        0x0                 },        /* POOL32Sxf_4 */
20675     { reserved_block      , 0                   , 0   , 32,
20676        0xfc0001ff, 0xc000017c, 0                      , 0,
20677        0x0                 },        /* POOL32Sxf~*(5) */
20678     { reserved_block      , 0                   , 0   , 32,
20679        0xfc0001ff, 0xc00001bc, 0                      , 0,
20680        0x0                 },        /* POOL32Sxf~*(6) */
20681     { reserved_block      , 0                   , 0   , 32,
20682        0xfc0001ff, 0xc00001fc, 0                      , 0,
20683        0x0                 },        /* POOL32Sxf~*(7) */
20684 };
20685 
20686 
20687 static const Pool POOL32S_4[8] = {
20688     { instruction         , 0                   , 0   , 32,
20689        0xfc00003f, 0xc0000004, &EXTD             , 0,
20690        MIPS64_             },        /* EXTD */
20691     { instruction         , 0                   , 0   , 32,
20692        0xfc00003f, 0xc000000c, &EXTD32           , 0,
20693        MIPS64_             },        /* EXTD32 */
20694     { reserved_block      , 0                   , 0   , 32,
20695        0xfc00003f, 0xc0000014, 0                      , 0,
20696        0x0                 },        /* POOL32S_4~*(2) */
20697     { reserved_block      , 0                   , 0   , 32,
20698        0xfc00003f, 0xc000001c, 0                      , 0,
20699        0x0                 },        /* POOL32S_4~*(3) */
20700     { reserved_block      , 0                   , 0   , 32,
20701        0xfc00003f, 0xc0000024, 0                      , 0,
20702        0x0                 },        /* POOL32S_4~*(4) */
20703     { reserved_block      , 0                   , 0   , 32,
20704        0xfc00003f, 0xc000002c, 0                      , 0,
20705        0x0                 },        /* POOL32S_4~*(5) */
20706     { reserved_block      , 0                   , 0   , 32,
20707        0xfc00003f, 0xc0000034, 0                      , 0,
20708        0x0                 },        /* POOL32S_4~*(6) */
20709     { pool                , POOL32Sxf           , 8   , 32,
20710        0xfc00003f, 0xc000003c, 0                      , 0,
20711        0x0                 },        /* POOL32Sxf */
20712 };
20713 
20714 
20715 static const Pool POOL32S[8] = {
20716     { pool                , POOL32S_0           , 64  , 32,
20717        0xfc000007, 0xc0000000, 0                      , 0,
20718        0x0                 },        /* POOL32S_0 */
20719     { reserved_block      , 0                   , 0   , 32,
20720        0xfc000007, 0xc0000001, 0                      , 0,
20721        0x0                 },        /* POOL32S~*(1) */
20722     { reserved_block      , 0                   , 0   , 32,
20723        0xfc000007, 0xc0000002, 0                      , 0,
20724        0x0                 },        /* POOL32S~*(2) */
20725     { reserved_block      , 0                   , 0   , 32,
20726        0xfc000007, 0xc0000003, 0                      , 0,
20727        0x0                 },        /* POOL32S~*(3) */
20728     { pool                , POOL32S_4           , 8   , 32,
20729        0xfc000007, 0xc0000004, 0                      , 0,
20730        0x0                 },        /* POOL32S_4 */
20731     { reserved_block      , 0                   , 0   , 32,
20732        0xfc000007, 0xc0000005, 0                      , 0,
20733        0x0                 },        /* POOL32S~*(5) */
20734     { reserved_block      , 0                   , 0   , 32,
20735        0xfc000007, 0xc0000006, 0                      , 0,
20736        0x0                 },        /* POOL32S~*(6) */
20737     { reserved_block      , 0                   , 0   , 32,
20738        0xfc000007, 0xc0000007, 0                      , 0,
20739        0x0                 },        /* POOL32S~*(7) */
20740 };
20741 
20742 
20743 static const Pool P_LUI[2] = {
20744     { instruction         , 0                   , 0   , 32,
20745        0xfc000002, 0xe0000000, &LUI              , 0,
20746        0x0                 },        /* LUI */
20747     { instruction         , 0                   , 0   , 32,
20748        0xfc000002, 0xe0000002, &ALUIPC           , 0,
20749        0x0                 },        /* ALUIPC */
20750 };
20751 
20752 
20753 static const Pool P_GP_LH[2] = {
20754     { instruction         , 0                   , 0   , 32,
20755        0xfc1c0001, 0x44100000, &LH_GP_           , 0,
20756        0x0                 },        /* LH[GP] */
20757     { instruction         , 0                   , 0   , 32,
20758        0xfc1c0001, 0x44100001, &LHU_GP_          , 0,
20759        0x0                 },        /* LHU[GP] */
20760 };
20761 
20762 
20763 static const Pool P_GP_SH[2] = {
20764     { instruction         , 0                   , 0   , 32,
20765        0xfc1c0001, 0x44140000, &SH_GP_           , 0,
20766        0x0                 },        /* SH[GP] */
20767     { reserved_block      , 0                   , 0   , 32,
20768        0xfc1c0001, 0x44140001, 0                      , 0,
20769        0x0                 },        /* P.GP.SH~*(1) */
20770 };
20771 
20772 
20773 static const Pool P_GP_CP1[4] = {
20774     { instruction         , 0                   , 0   , 32,
20775        0xfc1c0003, 0x44180000, &LWC1_GP_         , 0,
20776        CP1_                },        /* LWC1[GP] */
20777     { instruction         , 0                   , 0   , 32,
20778        0xfc1c0003, 0x44180001, &SWC1_GP_         , 0,
20779        CP1_                },        /* SWC1[GP] */
20780     { instruction         , 0                   , 0   , 32,
20781        0xfc1c0003, 0x44180002, &LDC1_GP_         , 0,
20782        CP1_                },        /* LDC1[GP] */
20783     { instruction         , 0                   , 0   , 32,
20784        0xfc1c0003, 0x44180003, &SDC1_GP_         , 0,
20785        CP1_                },        /* SDC1[GP] */
20786 };
20787 
20788 
20789 static const Pool P_GP_M64[4] = {
20790     { instruction         , 0                   , 0   , 32,
20791        0xfc1c0003, 0x441c0000, &LWU_GP_          , 0,
20792        MIPS64_             },        /* LWU[GP] */
20793     { reserved_block      , 0                   , 0   , 32,
20794        0xfc1c0003, 0x441c0001, 0                      , 0,
20795        0x0                 },        /* P.GP.M64~*(1) */
20796     { reserved_block      , 0                   , 0   , 32,
20797        0xfc1c0003, 0x441c0002, 0                      , 0,
20798        0x0                 },        /* P.GP.M64~*(2) */
20799     { reserved_block      , 0                   , 0   , 32,
20800        0xfc1c0003, 0x441c0003, 0                      , 0,
20801        0x0                 },        /* P.GP.M64~*(3) */
20802 };
20803 
20804 
20805 static const Pool P_GP_BH[8] = {
20806     { instruction         , 0                   , 0   , 32,
20807        0xfc1c0000, 0x44000000, &LB_GP_           , 0,
20808        0x0                 },        /* LB[GP] */
20809     { instruction         , 0                   , 0   , 32,
20810        0xfc1c0000, 0x44040000, &SB_GP_           , 0,
20811        0x0                 },        /* SB[GP] */
20812     { instruction         , 0                   , 0   , 32,
20813        0xfc1c0000, 0x44080000, &LBU_GP_          , 0,
20814        0x0                 },        /* LBU[GP] */
20815     { instruction         , 0                   , 0   , 32,
20816        0xfc1c0000, 0x440c0000, &ADDIU_GP_B_      , 0,
20817        0x0                 },        /* ADDIU[GP.B] */
20818     { pool                , P_GP_LH             , 2   , 32,
20819        0xfc1c0000, 0x44100000, 0                      , 0,
20820        0x0                 },        /* P.GP.LH */
20821     { pool                , P_GP_SH             , 2   , 32,
20822        0xfc1c0000, 0x44140000, 0                      , 0,
20823        0x0                 },        /* P.GP.SH */
20824     { pool                , P_GP_CP1            , 4   , 32,
20825        0xfc1c0000, 0x44180000, 0                      , 0,
20826        0x0                 },        /* P.GP.CP1 */
20827     { pool                , P_GP_M64            , 4   , 32,
20828        0xfc1c0000, 0x441c0000, 0                      , 0,
20829        0x0                 },        /* P.GP.M64 */
20830 };
20831 
20832 
20833 static const Pool P_LS_U12[16] = {
20834     { instruction         , 0                   , 0   , 32,
20835        0xfc00f000, 0x84000000, &LB_U12_          , 0,
20836        0x0                 },        /* LB[U12] */
20837     { instruction         , 0                   , 0   , 32,
20838        0xfc00f000, 0x84001000, &SB_U12_          , 0,
20839        0x0                 },        /* SB[U12] */
20840     { instruction         , 0                   , 0   , 32,
20841        0xfc00f000, 0x84002000, &LBU_U12_         , 0,
20842        0x0                 },        /* LBU[U12] */
20843     { instruction         , 0                   , 0   , 32,
20844        0xfc00f000, 0x84003000, &PREF_U12_        , 0,
20845        0x0                 },        /* PREF[U12] */
20846     { instruction         , 0                   , 0   , 32,
20847        0xfc00f000, 0x84004000, &LH_U12_          , 0,
20848        0x0                 },        /* LH[U12] */
20849     { instruction         , 0                   , 0   , 32,
20850        0xfc00f000, 0x84005000, &SH_U12_          , 0,
20851        0x0                 },        /* SH[U12] */
20852     { instruction         , 0                   , 0   , 32,
20853        0xfc00f000, 0x84006000, &LHU_U12_         , 0,
20854        0x0                 },        /* LHU[U12] */
20855     { instruction         , 0                   , 0   , 32,
20856        0xfc00f000, 0x84007000, &LWU_U12_         , 0,
20857        MIPS64_             },        /* LWU[U12] */
20858     { instruction         , 0                   , 0   , 32,
20859        0xfc00f000, 0x84008000, &LW_U12_          , 0,
20860        0x0                 },        /* LW[U12] */
20861     { instruction         , 0                   , 0   , 32,
20862        0xfc00f000, 0x84009000, &SW_U12_          , 0,
20863        0x0                 },        /* SW[U12] */
20864     { instruction         , 0                   , 0   , 32,
20865        0xfc00f000, 0x8400a000, &LWC1_U12_        , 0,
20866        CP1_                },        /* LWC1[U12] */
20867     { instruction         , 0                   , 0   , 32,
20868        0xfc00f000, 0x8400b000, &SWC1_U12_        , 0,
20869        CP1_                },        /* SWC1[U12] */
20870     { instruction         , 0                   , 0   , 32,
20871        0xfc00f000, 0x8400c000, &LD_U12_          , 0,
20872        MIPS64_             },        /* LD[U12] */
20873     { instruction         , 0                   , 0   , 32,
20874        0xfc00f000, 0x8400d000, &SD_U12_          , 0,
20875        MIPS64_             },        /* SD[U12] */
20876     { instruction         , 0                   , 0   , 32,
20877        0xfc00f000, 0x8400e000, &LDC1_U12_        , 0,
20878        CP1_                },        /* LDC1[U12] */
20879     { instruction         , 0                   , 0   , 32,
20880        0xfc00f000, 0x8400f000, &SDC1_U12_        , 0,
20881        CP1_                },        /* SDC1[U12] */
20882 };
20883 
20884 
20885 static const Pool P_PREF_S9_[2] = {
20886     { instruction         , 0                   , 0   , 32,
20887        0xffe07f00, 0xa7e01800, &SYNCI            , 0,
20888        0x0                 },        /* SYNCI */
20889     { instruction         , 0                   , 0   , 32,
20890        0xfc007f00, 0xa4001800, &PREF_S9_         , &PREF_S9__cond    ,
20891        0x0                 },        /* PREF[S9] */
20892 };
20893 
20894 
20895 static const Pool P_LS_S0[16] = {
20896     { instruction         , 0                   , 0   , 32,
20897        0xfc007f00, 0xa4000000, &LB_S9_           , 0,
20898        0x0                 },        /* LB[S9] */
20899     { instruction         , 0                   , 0   , 32,
20900        0xfc007f00, 0xa4000800, &SB_S9_           , 0,
20901        0x0                 },        /* SB[S9] */
20902     { instruction         , 0                   , 0   , 32,
20903        0xfc007f00, 0xa4001000, &LBU_S9_          , 0,
20904        0x0                 },        /* LBU[S9] */
20905     { pool                , P_PREF_S9_          , 2   , 32,
20906        0xfc007f00, 0xa4001800, 0                      , 0,
20907        0x0                 },        /* P.PREF[S9] */
20908     { instruction         , 0                   , 0   , 32,
20909        0xfc007f00, 0xa4002000, &LH_S9_           , 0,
20910        0x0                 },        /* LH[S9] */
20911     { instruction         , 0                   , 0   , 32,
20912        0xfc007f00, 0xa4002800, &SH_S9_           , 0,
20913        0x0                 },        /* SH[S9] */
20914     { instruction         , 0                   , 0   , 32,
20915        0xfc007f00, 0xa4003000, &LHU_S9_          , 0,
20916        0x0                 },        /* LHU[S9] */
20917     { instruction         , 0                   , 0   , 32,
20918        0xfc007f00, 0xa4003800, &LWU_S9_          , 0,
20919        MIPS64_             },        /* LWU[S9] */
20920     { instruction         , 0                   , 0   , 32,
20921        0xfc007f00, 0xa4004000, &LW_S9_           , 0,
20922        0x0                 },        /* LW[S9] */
20923     { instruction         , 0                   , 0   , 32,
20924        0xfc007f00, 0xa4004800, &SW_S9_           , 0,
20925        0x0                 },        /* SW[S9] */
20926     { instruction         , 0                   , 0   , 32,
20927        0xfc007f00, 0xa4005000, &LWC1_S9_         , 0,
20928        CP1_                },        /* LWC1[S9] */
20929     { instruction         , 0                   , 0   , 32,
20930        0xfc007f00, 0xa4005800, &SWC1_S9_         , 0,
20931        CP1_                },        /* SWC1[S9] */
20932     { instruction         , 0                   , 0   , 32,
20933        0xfc007f00, 0xa4006000, &LD_S9_           , 0,
20934        MIPS64_             },        /* LD[S9] */
20935     { instruction         , 0                   , 0   , 32,
20936        0xfc007f00, 0xa4006800, &SD_S9_           , 0,
20937        MIPS64_             },        /* SD[S9] */
20938     { instruction         , 0                   , 0   , 32,
20939        0xfc007f00, 0xa4007000, &LDC1_S9_         , 0,
20940        CP1_                },        /* LDC1[S9] */
20941     { instruction         , 0                   , 0   , 32,
20942        0xfc007f00, 0xa4007800, &SDC1_S9_         , 0,
20943        CP1_                },        /* SDC1[S9] */
20944 };
20945 
20946 
20947 static const Pool ASET_ACLR[2] = {
20948     { instruction         , 0                   , 0   , 32,
20949        0xfe007f00, 0xa4001100, &ASET             , 0,
20950        MCU_                },        /* ASET */
20951     { instruction         , 0                   , 0   , 32,
20952        0xfe007f00, 0xa6001100, &ACLR             , 0,
20953        MCU_                },        /* ACLR */
20954 };
20955 
20956 
20957 static const Pool P_LL[4] = {
20958     { instruction         , 0                   , 0   , 32,
20959        0xfc007f03, 0xa4005100, &LL               , 0,
20960        0x0                 },        /* LL */
20961     { instruction         , 0                   , 0   , 32,
20962        0xfc007f03, 0xa4005101, &LLWP             , 0,
20963        XNP_                },        /* LLWP */
20964     { reserved_block      , 0                   , 0   , 32,
20965        0xfc007f03, 0xa4005102, 0                      , 0,
20966        0x0                 },        /* P.LL~*(2) */
20967     { reserved_block      , 0                   , 0   , 32,
20968        0xfc007f03, 0xa4005103, 0                      , 0,
20969        0x0                 },        /* P.LL~*(3) */
20970 };
20971 
20972 
20973 static const Pool P_SC[4] = {
20974     { instruction         , 0                   , 0   , 32,
20975        0xfc007f03, 0xa4005900, &SC               , 0,
20976        0x0                 },        /* SC */
20977     { instruction         , 0                   , 0   , 32,
20978        0xfc007f03, 0xa4005901, &SCWP             , 0,
20979        XNP_                },        /* SCWP */
20980     { reserved_block      , 0                   , 0   , 32,
20981        0xfc007f03, 0xa4005902, 0                      , 0,
20982        0x0                 },        /* P.SC~*(2) */
20983     { reserved_block      , 0                   , 0   , 32,
20984        0xfc007f03, 0xa4005903, 0                      , 0,
20985        0x0                 },        /* P.SC~*(3) */
20986 };
20987 
20988 
20989 static const Pool P_LLD[8] = {
20990     { instruction         , 0                   , 0   , 32,
20991        0xfc007f07, 0xa4007100, &LLD              , 0,
20992        MIPS64_             },        /* LLD */
20993     { instruction         , 0                   , 0   , 32,
20994        0xfc007f07, 0xa4007101, &LLDP             , 0,
20995        MIPS64_             },        /* LLDP */
20996     { reserved_block      , 0                   , 0   , 32,
20997        0xfc007f07, 0xa4007102, 0                      , 0,
20998        0x0                 },        /* P.LLD~*(2) */
20999     { reserved_block      , 0                   , 0   , 32,
21000        0xfc007f07, 0xa4007103, 0                      , 0,
21001        0x0                 },        /* P.LLD~*(3) */
21002     { reserved_block      , 0                   , 0   , 32,
21003        0xfc007f07, 0xa4007104, 0                      , 0,
21004        0x0                 },        /* P.LLD~*(4) */
21005     { reserved_block      , 0                   , 0   , 32,
21006        0xfc007f07, 0xa4007105, 0                      , 0,
21007        0x0                 },        /* P.LLD~*(5) */
21008     { reserved_block      , 0                   , 0   , 32,
21009        0xfc007f07, 0xa4007106, 0                      , 0,
21010        0x0                 },        /* P.LLD~*(6) */
21011     { reserved_block      , 0                   , 0   , 32,
21012        0xfc007f07, 0xa4007107, 0                      , 0,
21013        0x0                 },        /* P.LLD~*(7) */
21014 };
21015 
21016 
21017 static const Pool P_SCD[8] = {
21018     { instruction         , 0                   , 0   , 32,
21019        0xfc007f07, 0xa4007900, &SCD              , 0,
21020        MIPS64_             },        /* SCD */
21021     { instruction         , 0                   , 0   , 32,
21022        0xfc007f07, 0xa4007901, &SCDP             , 0,
21023        MIPS64_             },        /* SCDP */
21024     { reserved_block      , 0                   , 0   , 32,
21025        0xfc007f07, 0xa4007902, 0                      , 0,
21026        0x0                 },        /* P.SCD~*(2) */
21027     { reserved_block      , 0                   , 0   , 32,
21028        0xfc007f07, 0xa4007903, 0                      , 0,
21029        0x0                 },        /* P.SCD~*(3) */
21030     { reserved_block      , 0                   , 0   , 32,
21031        0xfc007f07, 0xa4007904, 0                      , 0,
21032        0x0                 },        /* P.SCD~*(4) */
21033     { reserved_block      , 0                   , 0   , 32,
21034        0xfc007f07, 0xa4007905, 0                      , 0,
21035        0x0                 },        /* P.SCD~*(5) */
21036     { reserved_block      , 0                   , 0   , 32,
21037        0xfc007f07, 0xa4007906, 0                      , 0,
21038        0x0                 },        /* P.SCD~*(6) */
21039     { reserved_block      , 0                   , 0   , 32,
21040        0xfc007f07, 0xa4007907, 0                      , 0,
21041        0x0                 },        /* P.SCD~*(7) */
21042 };
21043 
21044 
21045 static const Pool P_LS_S1[16] = {
21046     { reserved_block      , 0                   , 0   , 32,
21047        0xfc007f00, 0xa4000100, 0                      , 0,
21048        0x0                 },        /* P.LS.S1~*(0) */
21049     { reserved_block      , 0                   , 0   , 32,
21050        0xfc007f00, 0xa4000900, 0                      , 0,
21051        0x0                 },        /* P.LS.S1~*(1) */
21052     { pool                , ASET_ACLR           , 2   , 32,
21053        0xfc007f00, 0xa4001100, 0                      , 0,
21054        0x0                 },        /* ASET_ACLR */
21055     { reserved_block      , 0                   , 0   , 32,
21056        0xfc007f00, 0xa4001900, 0                      , 0,
21057        0x0                 },        /* P.LS.S1~*(3) */
21058     { instruction         , 0                   , 0   , 32,
21059        0xfc007f00, 0xa4002100, &UALH             , 0,
21060        XMMS_               },        /* UALH */
21061     { instruction         , 0                   , 0   , 32,
21062        0xfc007f00, 0xa4002900, &UASH             , 0,
21063        XMMS_               },        /* UASH */
21064     { reserved_block      , 0                   , 0   , 32,
21065        0xfc007f00, 0xa4003100, 0                      , 0,
21066        0x0                 },        /* P.LS.S1~*(6) */
21067     { instruction         , 0                   , 0   , 32,
21068        0xfc007f00, 0xa4003900, &CACHE            , 0,
21069        CP0_                },        /* CACHE */
21070     { instruction         , 0                   , 0   , 32,
21071        0xfc007f00, 0xa4004100, &LWC2             , 0,
21072        CP2_                },        /* LWC2 */
21073     { instruction         , 0                   , 0   , 32,
21074        0xfc007f00, 0xa4004900, &SWC2             , 0,
21075        CP2_                },        /* SWC2 */
21076     { pool                , P_LL                , 4   , 32,
21077        0xfc007f00, 0xa4005100, 0                      , 0,
21078        0x0                 },        /* P.LL */
21079     { pool                , P_SC                , 4   , 32,
21080        0xfc007f00, 0xa4005900, 0                      , 0,
21081        0x0                 },        /* P.SC */
21082     { instruction         , 0                   , 0   , 32,
21083        0xfc007f00, 0xa4006100, &LDC2             , 0,
21084        CP2_                },        /* LDC2 */
21085     { instruction         , 0                   , 0   , 32,
21086        0xfc007f00, 0xa4006900, &SDC2             , 0,
21087        CP2_                },        /* SDC2 */
21088     { pool                , P_LLD               , 8   , 32,
21089        0xfc007f00, 0xa4007100, 0                      , 0,
21090        0x0                 },        /* P.LLD */
21091     { pool                , P_SCD               , 8   , 32,
21092        0xfc007f00, 0xa4007900, 0                      , 0,
21093        0x0                 },        /* P.SCD */
21094 };
21095 
21096 
21097 static const Pool P_PREFE[2] = {
21098     { instruction         , 0                   , 0   , 32,
21099        0xffe07f00, 0xa7e01a00, &SYNCIE           , 0,
21100        CP0_ | EVA_         },        /* SYNCIE */
21101     { instruction         , 0                   , 0   , 32,
21102        0xfc007f00, 0xa4001a00, &PREFE            , &PREFE_cond       ,
21103        CP0_ | EVA_         },        /* PREFE */
21104 };
21105 
21106 
21107 static const Pool P_LLE[4] = {
21108     { instruction         , 0                   , 0   , 32,
21109        0xfc007f03, 0xa4005200, &LLE              , 0,
21110        CP0_ | EVA_         },        /* LLE */
21111     { instruction         , 0                   , 0   , 32,
21112        0xfc007f03, 0xa4005201, &LLWPE            , 0,
21113        CP0_ | EVA_         },        /* LLWPE */
21114     { reserved_block      , 0                   , 0   , 32,
21115        0xfc007f03, 0xa4005202, 0                      , 0,
21116        0x0                 },        /* P.LLE~*(2) */
21117     { reserved_block      , 0                   , 0   , 32,
21118        0xfc007f03, 0xa4005203, 0                      , 0,
21119        0x0                 },        /* P.LLE~*(3) */
21120 };
21121 
21122 
21123 static const Pool P_SCE[4] = {
21124     { instruction         , 0                   , 0   , 32,
21125        0xfc007f03, 0xa4005a00, &SCE              , 0,
21126        CP0_ | EVA_         },        /* SCE */
21127     { instruction         , 0                   , 0   , 32,
21128        0xfc007f03, 0xa4005a01, &SCWPE            , 0,
21129        CP0_ | EVA_         },        /* SCWPE */
21130     { reserved_block      , 0                   , 0   , 32,
21131        0xfc007f03, 0xa4005a02, 0                      , 0,
21132        0x0                 },        /* P.SCE~*(2) */
21133     { reserved_block      , 0                   , 0   , 32,
21134        0xfc007f03, 0xa4005a03, 0                      , 0,
21135        0x0                 },        /* P.SCE~*(3) */
21136 };
21137 
21138 
21139 static const Pool P_LS_E0[16] = {
21140     { instruction         , 0                   , 0   , 32,
21141        0xfc007f00, 0xa4000200, &LBE              , 0,
21142        CP0_ | EVA_         },        /* LBE */
21143     { instruction         , 0                   , 0   , 32,
21144        0xfc007f00, 0xa4000a00, &SBE              , 0,
21145        CP0_ | EVA_         },        /* SBE */
21146     { instruction         , 0                   , 0   , 32,
21147        0xfc007f00, 0xa4001200, &LBUE             , 0,
21148        CP0_ | EVA_         },        /* LBUE */
21149     { pool                , P_PREFE             , 2   , 32,
21150        0xfc007f00, 0xa4001a00, 0                      , 0,
21151        0x0                 },        /* P.PREFE */
21152     { instruction         , 0                   , 0   , 32,
21153        0xfc007f00, 0xa4002200, &LHE              , 0,
21154        CP0_ | EVA_         },        /* LHE */
21155     { instruction         , 0                   , 0   , 32,
21156        0xfc007f00, 0xa4002a00, &SHE              , 0,
21157        CP0_ | EVA_         },        /* SHE */
21158     { instruction         , 0                   , 0   , 32,
21159        0xfc007f00, 0xa4003200, &LHUE             , 0,
21160        CP0_ | EVA_         },        /* LHUE */
21161     { instruction         , 0                   , 0   , 32,
21162        0xfc007f00, 0xa4003a00, &CACHEE           , 0,
21163        CP0_ | EVA_         },        /* CACHEE */
21164     { instruction         , 0                   , 0   , 32,
21165        0xfc007f00, 0xa4004200, &LWE              , 0,
21166        CP0_ | EVA_         },        /* LWE */
21167     { instruction         , 0                   , 0   , 32,
21168        0xfc007f00, 0xa4004a00, &SWE              , 0,
21169        CP0_ | EVA_         },        /* SWE */
21170     { pool                , P_LLE               , 4   , 32,
21171        0xfc007f00, 0xa4005200, 0                      , 0,
21172        0x0                 },        /* P.LLE */
21173     { pool                , P_SCE               , 4   , 32,
21174        0xfc007f00, 0xa4005a00, 0                      , 0,
21175        0x0                 },        /* P.SCE */
21176     { reserved_block      , 0                   , 0   , 32,
21177        0xfc007f00, 0xa4006200, 0                      , 0,
21178        0x0                 },        /* P.LS.E0~*(12) */
21179     { reserved_block      , 0                   , 0   , 32,
21180        0xfc007f00, 0xa4006a00, 0                      , 0,
21181        0x0                 },        /* P.LS.E0~*(13) */
21182     { reserved_block      , 0                   , 0   , 32,
21183        0xfc007f00, 0xa4007200, 0                      , 0,
21184        0x0                 },        /* P.LS.E0~*(14) */
21185     { reserved_block      , 0                   , 0   , 32,
21186        0xfc007f00, 0xa4007a00, 0                      , 0,
21187        0x0                 },        /* P.LS.E0~*(15) */
21188 };
21189 
21190 
21191 static const Pool P_LS_WM[2] = {
21192     { instruction         , 0                   , 0   , 32,
21193        0xfc000f00, 0xa4000400, &LWM              , 0,
21194        XMMS_               },        /* LWM */
21195     { instruction         , 0                   , 0   , 32,
21196        0xfc000f00, 0xa4000c00, &SWM              , 0,
21197        XMMS_               },        /* SWM */
21198 };
21199 
21200 
21201 static const Pool P_LS_UAWM[2] = {
21202     { instruction         , 0                   , 0   , 32,
21203        0xfc000f00, 0xa4000500, &UALWM            , 0,
21204        XMMS_               },        /* UALWM */
21205     { instruction         , 0                   , 0   , 32,
21206        0xfc000f00, 0xa4000d00, &UASWM            , 0,
21207        XMMS_               },        /* UASWM */
21208 };
21209 
21210 
21211 static const Pool P_LS_DM[2] = {
21212     { instruction         , 0                   , 0   , 32,
21213        0xfc000f00, 0xa4000600, &LDM              , 0,
21214        MIPS64_             },        /* LDM */
21215     { instruction         , 0                   , 0   , 32,
21216        0xfc000f00, 0xa4000e00, &SDM              , 0,
21217        MIPS64_             },        /* SDM */
21218 };
21219 
21220 
21221 static const Pool P_LS_UADM[2] = {
21222     { instruction         , 0                   , 0   , 32,
21223        0xfc000f00, 0xa4000700, &UALDM            , 0,
21224        MIPS64_             },        /* UALDM */
21225     { instruction         , 0                   , 0   , 32,
21226        0xfc000f00, 0xa4000f00, &UASDM            , 0,
21227        MIPS64_             },        /* UASDM */
21228 };
21229 
21230 
21231 static const Pool P_LS_S9[8] = {
21232     { pool                , P_LS_S0             , 16  , 32,
21233        0xfc000700, 0xa4000000, 0                      , 0,
21234        0x0                 },        /* P.LS.S0 */
21235     { pool                , P_LS_S1             , 16  , 32,
21236        0xfc000700, 0xa4000100, 0                      , 0,
21237        0x0                 },        /* P.LS.S1 */
21238     { pool                , P_LS_E0             , 16  , 32,
21239        0xfc000700, 0xa4000200, 0                      , 0,
21240        0x0                 },        /* P.LS.E0 */
21241     { reserved_block      , 0                   , 0   , 32,
21242        0xfc000700, 0xa4000300, 0                      , 0,
21243        0x0                 },        /* P.LS.S9~*(3) */
21244     { pool                , P_LS_WM             , 2   , 32,
21245        0xfc000700, 0xa4000400, 0                      , 0,
21246        0x0                 },        /* P.LS.WM */
21247     { pool                , P_LS_UAWM           , 2   , 32,
21248        0xfc000700, 0xa4000500, 0                      , 0,
21249        0x0                 },        /* P.LS.UAWM */
21250     { pool                , P_LS_DM             , 2   , 32,
21251        0xfc000700, 0xa4000600, 0                      , 0,
21252        0x0                 },        /* P.LS.DM */
21253     { pool                , P_LS_UADM           , 2   , 32,
21254        0xfc000700, 0xa4000700, 0                      , 0,
21255        0x0                 },        /* P.LS.UADM */
21256 };
21257 
21258 
21259 static const Pool P_BAL[2] = {
21260     { branch_instruction  , 0                   , 0   , 32,
21261        0xfe000000, 0x28000000, &BC_32_           , 0,
21262        0x0                 },        /* BC[32] */
21263     { call_instruction    , 0                   , 0   , 32,
21264        0xfe000000, 0x2a000000, &BALC_32_         , 0,
21265        0x0                 },        /* BALC[32] */
21266 };
21267 
21268 
21269 static const Pool P_BALRSC[2] = {
21270     { branch_instruction  , 0                   , 0   , 32,
21271        0xffe0f000, 0x48008000, &BRSC             , 0,
21272        0x0                 },        /* BRSC */
21273     { call_instruction    , 0                   , 0   , 32,
21274        0xfc00f000, 0x48008000, &BALRSC           , &BALRSC_cond      ,
21275        0x0                 },        /* BALRSC */
21276 };
21277 
21278 
21279 static const Pool P_J[16] = {
21280     { call_instruction    , 0                   , 0   , 32,
21281        0xfc00f000, 0x48000000, &JALRC_32_        , 0,
21282        0x0                 },        /* JALRC[32] */
21283     { call_instruction    , 0                   , 0   , 32,
21284        0xfc00f000, 0x48001000, &JALRC_HB         , 0,
21285        0x0                 },        /* JALRC.HB */
21286     { reserved_block      , 0                   , 0   , 32,
21287        0xfc00f000, 0x48002000, 0                      , 0,
21288        0x0                 },        /* P.J~*(2) */
21289     { reserved_block      , 0                   , 0   , 32,
21290        0xfc00f000, 0x48003000, 0                      , 0,
21291        0x0                 },        /* P.J~*(3) */
21292     { reserved_block      , 0                   , 0   , 32,
21293        0xfc00f000, 0x48004000, 0                      , 0,
21294        0x0                 },        /* P.J~*(4) */
21295     { reserved_block      , 0                   , 0   , 32,
21296        0xfc00f000, 0x48005000, 0                      , 0,
21297        0x0                 },        /* P.J~*(5) */
21298     { reserved_block      , 0                   , 0   , 32,
21299        0xfc00f000, 0x48006000, 0                      , 0,
21300        0x0                 },        /* P.J~*(6) */
21301     { reserved_block      , 0                   , 0   , 32,
21302        0xfc00f000, 0x48007000, 0                      , 0,
21303        0x0                 },        /* P.J~*(7) */
21304     { pool                , P_BALRSC            , 2   , 32,
21305        0xfc00f000, 0x48008000, 0                      , 0,
21306        0x0                 },        /* P.BALRSC */
21307     { reserved_block      , 0                   , 0   , 32,
21308        0xfc00f000, 0x48009000, 0                      , 0,
21309        0x0                 },        /* P.J~*(9) */
21310     { reserved_block      , 0                   , 0   , 32,
21311        0xfc00f000, 0x4800a000, 0                      , 0,
21312        0x0                 },        /* P.J~*(10) */
21313     { reserved_block      , 0                   , 0   , 32,
21314        0xfc00f000, 0x4800b000, 0                      , 0,
21315        0x0                 },        /* P.J~*(11) */
21316     { reserved_block      , 0                   , 0   , 32,
21317        0xfc00f000, 0x4800c000, 0                      , 0,
21318        0x0                 },        /* P.J~*(12) */
21319     { reserved_block      , 0                   , 0   , 32,
21320        0xfc00f000, 0x4800d000, 0                      , 0,
21321        0x0                 },        /* P.J~*(13) */
21322     { reserved_block      , 0                   , 0   , 32,
21323        0xfc00f000, 0x4800e000, 0                      , 0,
21324        0x0                 },        /* P.J~*(14) */
21325     { reserved_block      , 0                   , 0   , 32,
21326        0xfc00f000, 0x4800f000, 0                      , 0,
21327        0x0                 },        /* P.J~*(15) */
21328 };
21329 
21330 
21331 static const Pool P_BR3A[32] = {
21332     { branch_instruction  , 0                   , 0   , 32,
21333        0xfc1fc000, 0x88004000, &BC1EQZC          , 0,
21334        CP1_                },        /* BC1EQZC */
21335     { branch_instruction  , 0                   , 0   , 32,
21336        0xfc1fc000, 0x88014000, &BC1NEZC          , 0,
21337        CP1_                },        /* BC1NEZC */
21338     { branch_instruction  , 0                   , 0   , 32,
21339        0xfc1fc000, 0x88024000, &BC2EQZC          , 0,
21340        CP2_                },        /* BC2EQZC */
21341     { branch_instruction  , 0                   , 0   , 32,
21342        0xfc1fc000, 0x88034000, &BC2NEZC          , 0,
21343        CP2_                },        /* BC2NEZC */
21344     { branch_instruction  , 0                   , 0   , 32,
21345        0xfc1fc000, 0x88044000, &BPOSGE32C        , 0,
21346        DSP_                },        /* BPOSGE32C */
21347     { reserved_block      , 0                   , 0   , 32,
21348        0xfc1fc000, 0x88054000, 0                      , 0,
21349        0x0                 },        /* P.BR3A~*(5) */
21350     { reserved_block      , 0                   , 0   , 32,
21351        0xfc1fc000, 0x88064000, 0                      , 0,
21352        0x0                 },        /* P.BR3A~*(6) */
21353     { reserved_block      , 0                   , 0   , 32,
21354        0xfc1fc000, 0x88074000, 0                      , 0,
21355        0x0                 },        /* P.BR3A~*(7) */
21356     { reserved_block      , 0                   , 0   , 32,
21357        0xfc1fc000, 0x88084000, 0                      , 0,
21358        0x0                 },        /* P.BR3A~*(8) */
21359     { reserved_block      , 0                   , 0   , 32,
21360        0xfc1fc000, 0x88094000, 0                      , 0,
21361        0x0                 },        /* P.BR3A~*(9) */
21362     { reserved_block      , 0                   , 0   , 32,
21363        0xfc1fc000, 0x880a4000, 0                      , 0,
21364        0x0                 },        /* P.BR3A~*(10) */
21365     { reserved_block      , 0                   , 0   , 32,
21366        0xfc1fc000, 0x880b4000, 0                      , 0,
21367        0x0                 },        /* P.BR3A~*(11) */
21368     { reserved_block      , 0                   , 0   , 32,
21369        0xfc1fc000, 0x880c4000, 0                      , 0,
21370        0x0                 },        /* P.BR3A~*(12) */
21371     { reserved_block      , 0                   , 0   , 32,
21372        0xfc1fc000, 0x880d4000, 0                      , 0,
21373        0x0                 },        /* P.BR3A~*(13) */
21374     { reserved_block      , 0                   , 0   , 32,
21375        0xfc1fc000, 0x880e4000, 0                      , 0,
21376        0x0                 },        /* P.BR3A~*(14) */
21377     { reserved_block      , 0                   , 0   , 32,
21378        0xfc1fc000, 0x880f4000, 0                      , 0,
21379        0x0                 },        /* P.BR3A~*(15) */
21380     { reserved_block      , 0                   , 0   , 32,
21381        0xfc1fc000, 0x88104000, 0                      , 0,
21382        0x0                 },        /* P.BR3A~*(16) */
21383     { reserved_block      , 0                   , 0   , 32,
21384        0xfc1fc000, 0x88114000, 0                      , 0,
21385        0x0                 },        /* P.BR3A~*(17) */
21386     { reserved_block      , 0                   , 0   , 32,
21387        0xfc1fc000, 0x88124000, 0                      , 0,
21388        0x0                 },        /* P.BR3A~*(18) */
21389     { reserved_block      , 0                   , 0   , 32,
21390        0xfc1fc000, 0x88134000, 0                      , 0,
21391        0x0                 },        /* P.BR3A~*(19) */
21392     { reserved_block      , 0                   , 0   , 32,
21393        0xfc1fc000, 0x88144000, 0                      , 0,
21394        0x0                 },        /* P.BR3A~*(20) */
21395     { reserved_block      , 0                   , 0   , 32,
21396        0xfc1fc000, 0x88154000, 0                      , 0,
21397        0x0                 },        /* P.BR3A~*(21) */
21398     { reserved_block      , 0                   , 0   , 32,
21399        0xfc1fc000, 0x88164000, 0                      , 0,
21400        0x0                 },        /* P.BR3A~*(22) */
21401     { reserved_block      , 0                   , 0   , 32,
21402        0xfc1fc000, 0x88174000, 0                      , 0,
21403        0x0                 },        /* P.BR3A~*(23) */
21404     { reserved_block      , 0                   , 0   , 32,
21405        0xfc1fc000, 0x88184000, 0                      , 0,
21406        0x0                 },        /* P.BR3A~*(24) */
21407     { reserved_block      , 0                   , 0   , 32,
21408        0xfc1fc000, 0x88194000, 0                      , 0,
21409        0x0                 },        /* P.BR3A~*(25) */
21410     { reserved_block      , 0                   , 0   , 32,
21411        0xfc1fc000, 0x881a4000, 0                      , 0,
21412        0x0                 },        /* P.BR3A~*(26) */
21413     { reserved_block      , 0                   , 0   , 32,
21414        0xfc1fc000, 0x881b4000, 0                      , 0,
21415        0x0                 },        /* P.BR3A~*(27) */
21416     { reserved_block      , 0                   , 0   , 32,
21417        0xfc1fc000, 0x881c4000, 0                      , 0,
21418        0x0                 },        /* P.BR3A~*(28) */
21419     { reserved_block      , 0                   , 0   , 32,
21420        0xfc1fc000, 0x881d4000, 0                      , 0,
21421        0x0                 },        /* P.BR3A~*(29) */
21422     { reserved_block      , 0                   , 0   , 32,
21423        0xfc1fc000, 0x881e4000, 0                      , 0,
21424        0x0                 },        /* P.BR3A~*(30) */
21425     { reserved_block      , 0                   , 0   , 32,
21426        0xfc1fc000, 0x881f4000, 0                      , 0,
21427        0x0                 },        /* P.BR3A~*(31) */
21428 };
21429 
21430 
21431 static const Pool P_BR1[4] = {
21432     { branch_instruction  , 0                   , 0   , 32,
21433        0xfc00c000, 0x88000000, &BEQC_32_         , 0,
21434        0x0                 },        /* BEQC[32] */
21435     { pool                , P_BR3A              , 32  , 32,
21436        0xfc00c000, 0x88004000, 0                      , 0,
21437        0x0                 },        /* P.BR3A */
21438     { branch_instruction  , 0                   , 0   , 32,
21439        0xfc00c000, 0x88008000, &BGEC             , 0,
21440        0x0                 },        /* BGEC */
21441     { branch_instruction  , 0                   , 0   , 32,
21442        0xfc00c000, 0x8800c000, &BGEUC            , 0,
21443        0x0                 },        /* BGEUC */
21444 };
21445 
21446 
21447 static const Pool P_BR2[4] = {
21448     { branch_instruction  , 0                   , 0   , 32,
21449        0xfc00c000, 0xa8000000, &BNEC_32_         , 0,
21450        0x0                 },        /* BNEC[32] */
21451     { reserved_block      , 0                   , 0   , 32,
21452        0xfc00c000, 0xa8004000, 0                      , 0,
21453        0x0                 },        /* P.BR2~*(1) */
21454     { branch_instruction  , 0                   , 0   , 32,
21455        0xfc00c000, 0xa8008000, &BLTC             , 0,
21456        0x0                 },        /* BLTC */
21457     { branch_instruction  , 0                   , 0   , 32,
21458        0xfc00c000, 0xa800c000, &BLTUC            , 0,
21459        0x0                 },        /* BLTUC */
21460 };
21461 
21462 
21463 static const Pool P_BRI[8] = {
21464     { branch_instruction  , 0                   , 0   , 32,
21465        0xfc1c0000, 0xc8000000, &BEQIC            , 0,
21466        0x0                 },        /* BEQIC */
21467     { branch_instruction  , 0                   , 0   , 32,
21468        0xfc1c0000, 0xc8040000, &BBEQZC           , 0,
21469        XMMS_               },        /* BBEQZC */
21470     { branch_instruction  , 0                   , 0   , 32,
21471        0xfc1c0000, 0xc8080000, &BGEIC            , 0,
21472        0x0                 },        /* BGEIC */
21473     { branch_instruction  , 0                   , 0   , 32,
21474        0xfc1c0000, 0xc80c0000, &BGEIUC           , 0,
21475        0x0                 },        /* BGEIUC */
21476     { branch_instruction  , 0                   , 0   , 32,
21477        0xfc1c0000, 0xc8100000, &BNEIC            , 0,
21478        0x0                 },        /* BNEIC */
21479     { branch_instruction  , 0                   , 0   , 32,
21480        0xfc1c0000, 0xc8140000, &BBNEZC           , 0,
21481        XMMS_               },        /* BBNEZC */
21482     { branch_instruction  , 0                   , 0   , 32,
21483        0xfc1c0000, 0xc8180000, &BLTIC            , 0,
21484        0x0                 },        /* BLTIC */
21485     { branch_instruction  , 0                   , 0   , 32,
21486        0xfc1c0000, 0xc81c0000, &BLTIUC           , 0,
21487        0x0                 },        /* BLTIUC */
21488 };
21489 
21490 
21491 static const Pool P32[32] = {
21492     { pool                , P_ADDIU             , 2   , 32,
21493        0xfc000000, 0x00000000, 0                      , 0,
21494        0x0                 },        /* P.ADDIU */
21495     { pool                , P32A                , 8   , 32,
21496        0xfc000000, 0x20000000, 0                      , 0,
21497        0x0                 },        /* P32A */
21498     { pool                , P_GP_W              , 4   , 32,
21499        0xfc000000, 0x40000000, 0                      , 0,
21500        0x0                 },        /* P.GP.W */
21501     { pool                , POOL48I             , 32  , 48,
21502        0xfc0000000000ull, 0x600000000000ull, 0                      , 0,
21503        0x0                 },        /* POOL48I */
21504     { pool                , P_U12               , 16  , 32,
21505        0xfc000000, 0x80000000, 0                      , 0,
21506        0x0                 },        /* P.U12 */
21507     { pool                , POOL32F             , 8   , 32,
21508        0xfc000000, 0xa0000000, 0                      , 0,
21509        CP1_                },        /* POOL32F */
21510     { pool                , POOL32S             , 8   , 32,
21511        0xfc000000, 0xc0000000, 0                      , 0,
21512        0x0                 },        /* POOL32S */
21513     { pool                , P_LUI               , 2   , 32,
21514        0xfc000000, 0xe0000000, 0                      , 0,
21515        0x0                 },        /* P.LUI */
21516     { instruction         , 0                   , 0   , 32,
21517        0xfc000000, 0x04000000, &ADDIUPC_32_      , 0,
21518        0x0                 },        /* ADDIUPC[32] */
21519     { reserved_block      , 0                   , 0   , 32,
21520        0xfc000000, 0x24000000, 0                      , 0,
21521        0x0                 },        /* P32~*(5) */
21522     { pool                , P_GP_BH             , 8   , 32,
21523        0xfc000000, 0x44000000, 0                      , 0,
21524        0x0                 },        /* P.GP.BH */
21525     { reserved_block      , 0                   , 0   , 32,
21526        0xfc000000, 0x64000000, 0                      , 0,
21527        0x0                 },        /* P32~*(13) */
21528     { pool                , P_LS_U12            , 16  , 32,
21529        0xfc000000, 0x84000000, 0                      , 0,
21530        0x0                 },        /* P.LS.U12 */
21531     { pool                , P_LS_S9             , 8   , 32,
21532        0xfc000000, 0xa4000000, 0                      , 0,
21533        0x0                 },        /* P.LS.S9 */
21534     { reserved_block      , 0                   , 0   , 32,
21535        0xfc000000, 0xc4000000, 0                      , 0,
21536        0x0                 },        /* P32~*(25) */
21537     { reserved_block      , 0                   , 0   , 32,
21538        0xfc000000, 0xe4000000, 0                      , 0,
21539        0x0                 },        /* P32~*(29) */
21540     { call_instruction    , 0                   , 0   , 32,
21541        0xfc000000, 0x08000000, &MOVE_BALC        , 0,
21542        XMMS_               },        /* MOVE.BALC */
21543     { pool                , P_BAL               , 2   , 32,
21544        0xfc000000, 0x28000000, 0                      , 0,
21545        0x0                 },        /* P.BAL */
21546     { pool                , P_J                 , 16  , 32,
21547        0xfc000000, 0x48000000, 0                      , 0,
21548        0x0                 },        /* P.J */
21549     { reserved_block      , 0                   , 0   , 32,
21550        0xfc000000, 0x68000000, 0                      , 0,
21551        0x0                 },        /* P32~*(14) */
21552     { pool                , P_BR1               , 4   , 32,
21553        0xfc000000, 0x88000000, 0                      , 0,
21554        0x0                 },        /* P.BR1 */
21555     { pool                , P_BR2               , 4   , 32,
21556        0xfc000000, 0xa8000000, 0                      , 0,
21557        0x0                 },        /* P.BR2 */
21558     { pool                , P_BRI               , 8   , 32,
21559        0xfc000000, 0xc8000000, 0                      , 0,
21560        0x0                 },        /* P.BRI */
21561     { reserved_block      , 0                   , 0   , 32,
21562        0xfc000000, 0xe8000000, 0                      , 0,
21563        0x0                 },        /* P32~*(30) */
21564     { reserved_block      , 0                   , 0   , 32,
21565        0xfc000000, 0x0c000000, 0                      , 0,
21566        0x0                 },        /* P32~*(3) */
21567     { reserved_block      , 0                   , 0   , 32,
21568        0xfc000000, 0x2c000000, 0                      , 0,
21569        0x0                 },        /* P32~*(7) */
21570     { reserved_block      , 0                   , 0   , 32,
21571        0xfc000000, 0x4c000000, 0                      , 0,
21572        0x0                 },        /* P32~*(11) */
21573     { reserved_block      , 0                   , 0   , 32,
21574        0xfc000000, 0x6c000000, 0                      , 0,
21575        0x0                 },        /* P32~*(15) */
21576     { reserved_block      , 0                   , 0   , 32,
21577        0xfc000000, 0x8c000000, 0                      , 0,
21578        0x0                 },        /* P32~*(19) */
21579     { reserved_block      , 0                   , 0   , 32,
21580        0xfc000000, 0xac000000, 0                      , 0,
21581        0x0                 },        /* P32~*(23) */
21582     { reserved_block      , 0                   , 0   , 32,
21583        0xfc000000, 0xcc000000, 0                      , 0,
21584        0x0                 },        /* P32~*(27) */
21585     { reserved_block      , 0                   , 0   , 32,
21586        0xfc000000, 0xec000000, 0                      , 0,
21587        0x0                 },        /* P32~*(31) */
21588 };
21589 
21590 
21591 static const Pool P16_SYSCALL[2] = {
21592     { instruction         , 0                   , 0   , 16,
21593        0xfffc    , 0x1008    , &SYSCALL_16_      , 0,
21594        0x0                 },        /* SYSCALL[16] */
21595     { instruction         , 0                   , 0   , 16,
21596        0xfffc    , 0x100c    , &HYPCALL_16_      , 0,
21597        CP0_ | VZ_          },        /* HYPCALL[16] */
21598 };
21599 
21600 
21601 static const Pool P16_RI[4] = {
21602     { reserved_block      , 0                   , 0   , 16,
21603        0xfff8    , 0x1000    , 0                      , 0,
21604        0x0                 },        /* P16.RI~*(0) */
21605     { pool                , P16_SYSCALL         , 2   , 16,
21606        0xfff8    , 0x1008    , 0                      , 0,
21607        0x0                 },        /* P16.SYSCALL */
21608     { instruction         , 0                   , 0   , 16,
21609        0xfff8    , 0x1010    , &BREAK_16_        , 0,
21610        0x0                 },        /* BREAK[16] */
21611     { instruction         , 0                   , 0   , 16,
21612        0xfff8    , 0x1018    , &SDBBP_16_        , 0,
21613        EJTAG_              },        /* SDBBP[16] */
21614 };
21615 
21616 
21617 static const Pool P16_MV[2] = {
21618     { pool                , P16_RI              , 4   , 16,
21619        0xffe0    , 0x1000    , 0                      , 0,
21620        0x0                 },        /* P16.RI */
21621     { instruction         , 0                   , 0   , 16,
21622        0xfc00    , 0x1000    , &MOVE             , &MOVE_cond        ,
21623        0x0                 },        /* MOVE */
21624 };
21625 
21626 
21627 static const Pool P16_SHIFT[2] = {
21628     { instruction         , 0                   , 0   , 16,
21629        0xfc08    , 0x3000    , &SLL_16_          , 0,
21630        0x0                 },        /* SLL[16] */
21631     { instruction         , 0                   , 0   , 16,
21632        0xfc08    , 0x3008    , &SRL_16_          , 0,
21633        0x0                 },        /* SRL[16] */
21634 };
21635 
21636 
21637 static const Pool POOL16C_00[4] = {
21638     { instruction         , 0                   , 0   , 16,
21639        0xfc0f    , 0x5000    , &NOT_16_          , 0,
21640        0x0                 },        /* NOT[16] */
21641     { instruction         , 0                   , 0   , 16,
21642        0xfc0f    , 0x5004    , &XOR_16_          , 0,
21643        0x0                 },        /* XOR[16] */
21644     { instruction         , 0                   , 0   , 16,
21645        0xfc0f    , 0x5008    , &AND_16_          , 0,
21646        0x0                 },        /* AND[16] */
21647     { instruction         , 0                   , 0   , 16,
21648        0xfc0f    , 0x500c    , &OR_16_           , 0,
21649        0x0                 },        /* OR[16] */
21650 };
21651 
21652 
21653 static const Pool POOL16C_0[2] = {
21654     { pool                , POOL16C_00          , 4   , 16,
21655        0xfc03    , 0x5000    , 0                      , 0,
21656        0x0                 },        /* POOL16C_00 */
21657     { reserved_block      , 0                   , 0   , 16,
21658        0xfc03    , 0x5002    , 0                      , 0,
21659        0x0                 },        /* POOL16C_0~*(1) */
21660 };
21661 
21662 
21663 static const Pool P16C[2] = {
21664     { pool                , POOL16C_0           , 2   , 16,
21665        0xfc01    , 0x5000    , 0                      , 0,
21666        0x0                 },        /* POOL16C_0 */
21667     { instruction         , 0                   , 0   , 16,
21668        0xfc01    , 0x5001    , &LWXS_16_         , 0,
21669        0x0                 },        /* LWXS[16] */
21670 };
21671 
21672 
21673 static const Pool P16_A1[2] = {
21674     { reserved_block      , 0                   , 0   , 16,
21675        0xfc40    , 0x7000    , 0                      , 0,
21676        0x0                 },        /* P16.A1~*(0) */
21677     { instruction         , 0                   , 0   , 16,
21678        0xfc40    , 0x7040    , &ADDIU_R1_SP_     , 0,
21679        0x0                 },        /* ADDIU[R1.SP] */
21680 };
21681 
21682 
21683 static const Pool P_ADDIU_RS5_[2] = {
21684     { instruction         , 0                   , 0   , 16,
21685        0xffe8    , 0x9008    , &NOP_16_          , 0,
21686        0x0                 },        /* NOP[16] */
21687     { instruction         , 0                   , 0   , 16,
21688        0xfc08    , 0x9008    , &ADDIU_RS5_       , &ADDIU_RS5__cond  ,
21689        0x0                 },        /* ADDIU[RS5] */
21690 };
21691 
21692 
21693 static const Pool P16_A2[2] = {
21694     { instruction         , 0                   , 0   , 16,
21695        0xfc08    , 0x9000    , &ADDIU_R2_        , 0,
21696        0x0                 },        /* ADDIU[R2] */
21697     { pool                , P_ADDIU_RS5_        , 2   , 16,
21698        0xfc08    , 0x9008    , 0                      , 0,
21699        0x0                 },        /* P.ADDIU[RS5] */
21700 };
21701 
21702 
21703 static const Pool P16_ADDU[2] = {
21704     { instruction         , 0                   , 0   , 16,
21705        0xfc01    , 0xb000    , &ADDU_16_         , 0,
21706        0x0                 },        /* ADDU[16] */
21707     { instruction         , 0                   , 0   , 16,
21708        0xfc01    , 0xb001    , &SUBU_16_         , 0,
21709        0x0                 },        /* SUBU[16] */
21710 };
21711 
21712 
21713 static const Pool P16_JRC[2] = {
21714     { branch_instruction  , 0                   , 0   , 16,
21715        0xfc1f    , 0xd800    , &JRC              , 0,
21716        0x0                 },        /* JRC */
21717     { call_instruction    , 0                   , 0   , 16,
21718        0xfc1f    , 0xd810    , &JALRC_16_        , 0,
21719        0x0                 },        /* JALRC[16] */
21720 };
21721 
21722 
21723 static const Pool P16_BR1[2] = {
21724     { branch_instruction  , 0                   , 0   , 16,
21725        0xfc00    , 0xd800    , &BEQC_16_         , &BEQC_16__cond    ,
21726        XMMS_               },        /* BEQC[16] */
21727     { branch_instruction  , 0                   , 0   , 16,
21728        0xfc00    , 0xd800    , &BNEC_16_         , &BNEC_16__cond    ,
21729        XMMS_               },        /* BNEC[16] */
21730 };
21731 
21732 
21733 static const Pool P16_BR[2] = {
21734     { pool                , P16_JRC             , 2   , 16,
21735        0xfc0f    , 0xd800    , 0                      , 0,
21736        0x0                 },        /* P16.JRC */
21737     { pool                , P16_BR1             , 2   , 16,
21738        0xfc00    , 0xd800    , 0                      , &P16_BR1_cond     ,
21739        0x0                 },        /* P16.BR1 */
21740 };
21741 
21742 
21743 static const Pool P16_SR[2] = {
21744     { instruction         , 0                   , 0   , 16,
21745        0xfd00    , 0x1c00    , &SAVE_16_         , 0,
21746        0x0                 },        /* SAVE[16] */
21747     { return_instruction  , 0                   , 0   , 16,
21748        0xfd00    , 0x1d00    , &RESTORE_JRC_16_  , 0,
21749        0x0                 },        /* RESTORE.JRC[16] */
21750 };
21751 
21752 
21753 static const Pool P16_4X4[4] = {
21754     { instruction         , 0                   , 0   , 16,
21755        0xfd08    , 0x3c00    , &ADDU_4X4_        , 0,
21756        XMMS_               },        /* ADDU[4X4] */
21757     { instruction         , 0                   , 0   , 16,
21758        0xfd08    , 0x3c08    , &MUL_4X4_         , 0,
21759        XMMS_               },        /* MUL[4X4] */
21760     { reserved_block      , 0                   , 0   , 16,
21761        0xfd08    , 0x3d00    , 0                      , 0,
21762        0x0                 },        /* P16.4X4~*(2) */
21763     { reserved_block      , 0                   , 0   , 16,
21764        0xfd08    , 0x3d08    , 0                      , 0,
21765        0x0                 },        /* P16.4X4~*(3) */
21766 };
21767 
21768 
21769 static const Pool P16_LB[4] = {
21770     { instruction         , 0                   , 0   , 16,
21771        0xfc0c    , 0x5c00    , &LB_16_           , 0,
21772        0x0                 },        /* LB[16] */
21773     { instruction         , 0                   , 0   , 16,
21774        0xfc0c    , 0x5c04    , &SB_16_           , 0,
21775        0x0                 },        /* SB[16] */
21776     { instruction         , 0                   , 0   , 16,
21777        0xfc0c    , 0x5c08    , &LBU_16_          , 0,
21778        0x0                 },        /* LBU[16] */
21779     { reserved_block      , 0                   , 0   , 16,
21780        0xfc0c    , 0x5c0c    , 0                      , 0,
21781        0x0                 },        /* P16.LB~*(3) */
21782 };
21783 
21784 
21785 static const Pool P16_LH[4] = {
21786     { instruction         , 0                   , 0   , 16,
21787        0xfc09    , 0x7c00    , &LH_16_           , 0,
21788        0x0                 },        /* LH[16] */
21789     { instruction         , 0                   , 0   , 16,
21790        0xfc09    , 0x7c01    , &SH_16_           , 0,
21791        0x0                 },        /* SH[16] */
21792     { instruction         , 0                   , 0   , 16,
21793        0xfc09    , 0x7c08    , &LHU_16_          , 0,
21794        0x0                 },        /* LHU[16] */
21795     { reserved_block      , 0                   , 0   , 16,
21796        0xfc09    , 0x7c09    , 0                      , 0,
21797        0x0                 },        /* P16.LH~*(3) */
21798 };
21799 
21800 
21801 static const Pool P16[32] = {
21802     { pool                , P16_MV              , 2   , 16,
21803        0xfc00    , 0x1000    , 0                      , 0,
21804        0x0                 },        /* P16.MV */
21805     { pool                , P16_SHIFT           , 2   , 16,
21806        0xfc00    , 0x3000    , 0                      , 0,
21807        0x0                 },        /* P16.SHIFT */
21808     { pool                , P16C                , 2   , 16,
21809        0xfc00    , 0x5000    , 0                      , 0,
21810        0x0                 },        /* P16C */
21811     { pool                , P16_A1              , 2   , 16,
21812        0xfc00    , 0x7000    , 0                      , 0,
21813        0x0                 },        /* P16.A1 */
21814     { pool                , P16_A2              , 2   , 16,
21815        0xfc00    , 0x9000    , 0                      , 0,
21816        0x0                 },        /* P16.A2 */
21817     { pool                , P16_ADDU            , 2   , 16,
21818        0xfc00    , 0xb000    , 0                      , 0,
21819        0x0                 },        /* P16.ADDU */
21820     { instruction         , 0                   , 0   , 16,
21821        0xfc00    , 0xd000    , &LI_16_           , 0,
21822        0x0                 },        /* LI[16] */
21823     { instruction         , 0                   , 0   , 16,
21824        0xfc00    , 0xf000    , &ANDI_16_         , 0,
21825        0x0                 },        /* ANDI[16] */
21826     { instruction         , 0                   , 0   , 16,
21827        0xfc00    , 0x1400    , &LW_16_           , 0,
21828        0x0                 },        /* LW[16] */
21829     { instruction         , 0                   , 0   , 16,
21830        0xfc00    , 0x3400    , &LW_SP_           , 0,
21831        0x0                 },        /* LW[SP] */
21832     { instruction         , 0                   , 0   , 16,
21833        0xfc00    , 0x5400    , &LW_GP16_         , 0,
21834        0x0                 },        /* LW[GP16] */
21835     { instruction         , 0                   , 0   , 16,
21836        0xfc00    , 0x7400    , &LW_4X4_          , 0,
21837        XMMS_               },        /* LW[4X4] */
21838     { instruction         , 0                   , 0   , 16,
21839        0xfc00    , 0x9400    , &SW_16_           , 0,
21840        0x0                 },        /* SW[16] */
21841     { instruction         , 0                   , 0   , 16,
21842        0xfc00    , 0xb400    , &SW_SP_           , 0,
21843        0x0                 },        /* SW[SP] */
21844     { instruction         , 0                   , 0   , 16,
21845        0xfc00    , 0xd400    , &SW_GP16_         , 0,
21846        0x0                 },        /* SW[GP16] */
21847     { instruction         , 0                   , 0   , 16,
21848        0xfc00    , 0xf400    , &SW_4X4_          , 0,
21849        XMMS_               },        /* SW[4X4] */
21850     { branch_instruction  , 0                   , 0   , 16,
21851        0xfc00    , 0x1800    , &BC_16_           , 0,
21852        0x0                 },        /* BC[16] */
21853     { call_instruction    , 0                   , 0   , 16,
21854        0xfc00    , 0x3800    , &BALC_16_         , 0,
21855        0x0                 },        /* BALC[16] */
21856     { reserved_block      , 0                   , 0   , 16,
21857        0xfc00    , 0x5800    , 0                      , 0,
21858        0x0                 },        /* P16~*(10) */
21859     { reserved_block      , 0                   , 0   , 16,
21860        0xfc00    , 0x7800    , 0                      , 0,
21861        0x0                 },        /* P16~*(14) */
21862     { branch_instruction  , 0                   , 0   , 16,
21863        0xfc00    , 0x9800    , &BEQZC_16_        , 0,
21864        0x0                 },        /* BEQZC[16] */
21865     { branch_instruction  , 0                   , 0   , 16,
21866        0xfc00    , 0xb800    , &BNEZC_16_        , 0,
21867        0x0                 },        /* BNEZC[16] */
21868     { pool                , P16_BR              , 2   , 16,
21869        0xfc00    , 0xd800    , 0                      , 0,
21870        0x0                 },        /* P16.BR */
21871     { reserved_block      , 0                   , 0   , 16,
21872        0xfc00    , 0xf800    , 0                      , 0,
21873        0x0                 },        /* P16~*(30) */
21874     { pool                , P16_SR              , 2   , 16,
21875        0xfc00    , 0x1c00    , 0                      , 0,
21876        0x0                 },        /* P16.SR */
21877     { pool                , P16_4X4             , 4   , 16,
21878        0xfc00    , 0x3c00    , 0                      , 0,
21879        0x0                 },        /* P16.4X4 */
21880     { pool                , P16_LB              , 4   , 16,
21881        0xfc00    , 0x5c00    , 0                      , 0,
21882        0x0                 },        /* P16.LB */
21883     { pool                , P16_LH              , 4   , 16,
21884        0xfc00    , 0x7c00    , 0                      , 0,
21885        0x0                 },        /* P16.LH */
21886     { reserved_block      , 0                   , 0   , 16,
21887        0xfc00    , 0x9c00    , 0                      , 0,
21888        0x0                 },        /* P16~*(19) */
21889     { instruction         , 0                   , 0   , 16,
21890        0xfc00    , 0xbc00    , &MOVEP            , 0,
21891        XMMS_               },        /* MOVEP */
21892     { reserved_block      , 0                   , 0   , 16,
21893        0xfc00    , 0xdc00    , 0                      , 0,
21894        0x0                 },        /* P16~*(27) */
21895     { instruction         , 0                   , 0   , 16,
21896        0xfc00    , 0xfc00    , &MOVEP_REV_       , 0,
21897        XMMS_               },        /* MOVEP[REV] */
21898 };
21899 
21900 
21901 static const Pool MAJOR[2] = {
21902     { pool                , P32                 , 32  , 32,
21903        0x10000000, 0x00000000, 0                      , 0,
21904        0x0                 },        /* P32 */
21905     { pool                , P16                 , 32  , 16,
21906        0x1000    , 0x1000    , 0                      , 0,
21907        0x0                 },        /* P16 */
21908 };
21909 
21910 static bool nanomips_dis(const uint16_t *data, char **buf, Dis_info *info)
21911 {
21912     TABLE_ENTRY_TYPE type;
21913 
21914     /* Handle runtime errors. */
21915     if (unlikely(sigsetjmp(info->buf, 0) != 0)) {
21916         return false;
21917     }
21918     return Disassemble(data, buf, &type, MAJOR, ARRAY_SIZE(MAJOR), info) >= 0;
21919 }
21920 
21921 static bool read_u16(uint16_t *ret, bfd_vma memaddr,
21922                      struct disassemble_info *info)
21923 {
21924     int status = (*info->read_memory_func)(memaddr, (bfd_byte *)ret, 2, info);
21925     if (status != 0) {
21926         (*info->memory_error_func)(status, memaddr, info);
21927         return false;
21928     }
21929 
21930     if ((info->endian == BFD_ENDIAN_BIG) != HOST_BIG_ENDIAN) {
21931         bswap16s(ret);
21932     }
21933     return true;
21934 }
21935 
21936 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
21937 {
21938     int length;
21939     uint16_t words[3] = { };
21940     g_autofree char *buf = NULL;
21941 
21942     info->bytes_per_chunk = 2;
21943     info->display_endian = info->endian;
21944     info->insn_info_valid = 1;
21945     info->branch_delay_insns = 0;
21946     info->data_size = 0;
21947     info->insn_type = dis_nonbranch;
21948     info->target = 0;
21949     info->target2 = 0;
21950 
21951     Dis_info disassm_info;
21952     disassm_info.m_pc = memaddr;
21953     disassm_info.fprintf_func = info->fprintf_func;
21954     disassm_info.stream = info->stream;
21955 
21956     if (!read_u16(&words[0], memaddr, info)) {
21957         return -1;
21958     }
21959     length = 2;
21960 
21961     /* Handle 32-bit opcodes.  */
21962     if ((words[0] & 0x1000) == 0) {
21963         if (!read_u16(&words[1], memaddr + 2, info)) {
21964             return -1;
21965         }
21966         length = 4;
21967 
21968         /* Handle 48-bit opcodes.  */
21969         if ((words[0] >> 10) == 0x18) {
21970             if (!read_u16(&words[1], memaddr + 4, info)) {
21971                 return -1;
21972             }
21973             length = 6;
21974         }
21975     }
21976 
21977     for (int i = 0; i < ARRAY_SIZE(words); i++) {
21978         if (i * 2 < length) {
21979             (*info->fprintf_func)(info->stream, "%04x ", words[i]);
21980         } else {
21981             (*info->fprintf_func)(info->stream, "     ");
21982         }
21983     }
21984 
21985     if (nanomips_dis(words, &buf, &disassm_info)) {
21986         (*info->fprintf_func) (info->stream, "%s", buf);
21987     }
21988 
21989     return length;
21990 }
21991