qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

nanomips.c (713872B)


      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 }