/*
 *  Source file for nanoMIPS disassembler component of QEMU
 *
 *  Copyright (C) 2018  Wave Computing, Inc.
 *  Copyright (C) 2018  Matthew Fortune <matthew.fortune@mips.com>
 *  Copyright (C) 2018  Aleksandar Markovic <amarkovic@wavecomp.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */

/*
 *  Documentation used while implementing this component:
 *
 *  [1] "MIPS® Architecture Base: nanoMIPS32(tm) Instruction Set Technical
 *      Reference Manual", Revision 01.01, April 27, 2018
 */

extern "C" {
#include "qemu/osdep.h"
#include "disas/bfd.h"
}

#include <cstring>
#include <stdexcept>
#include <sstream>
#include <stdio.h>
#include <stdarg.h>

#include "nanomips.h"

#define IMGASSERTONCE(test)


int nanomips_dis(char *buf,
                 unsigned address,
                 unsigned short one,
                 unsigned short two,
                 unsigned short three)
{
    std::string disasm;
    uint16 bits[3] = {one, two, three};

    NMD::TABLE_ENTRY_TYPE type;
    NMD d(address, NMD::ALL_ATTRIBUTES);
    int size = d.Disassemble(bits, disasm, type);

    strcpy(buf, disasm.c_str());
    return size;
}

int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
{
    int status;
    bfd_byte buffer[2];
    uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
    char buf[200];

    info->bytes_per_chunk = 2;
    info->display_endian = info->endian;
    info->insn_info_valid = 1;
    info->branch_delay_insns = 0;
    info->data_size = 0;
    info->insn_type = dis_nonbranch;
    info->target = 0;
    info->target2 = 0;

    status = (*info->read_memory_func)(memaddr, buffer, 2, info);
    if (status != 0) {
        (*info->memory_error_func)(status, memaddr, info);
        return -1;
    }

    if (info->endian == BFD_ENDIAN_BIG) {
        insn1 = bfd_getb16(buffer);
    } else {
        insn1 = bfd_getl16(buffer);
    }
    (*info->fprintf_func)(info->stream, "%04x ", insn1);

    /* Handle 32-bit opcodes.  */
    if ((insn1 & 0x1000) == 0) {
        status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info);
        if (status != 0) {
            (*info->memory_error_func)(status, memaddr + 2, info);
            return -1;
        }

        if (info->endian == BFD_ENDIAN_BIG) {
            insn2 = bfd_getb16(buffer);
        } else {
            insn2 = bfd_getl16(buffer);
        }
        (*info->fprintf_func)(info->stream, "%04x ", insn2);
    } else {
        (*info->fprintf_func)(info->stream, "     ");
    }
    /* Handle 48-bit opcodes.  */
    if ((insn1 >> 10) == 0x18) {
        status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info);
        if (status != 0) {
            (*info->memory_error_func)(status, memaddr + 4, info);
            return -1;
        }

        if (info->endian == BFD_ENDIAN_BIG) {
            insn3 = bfd_getb16(buffer);
        } else {
            insn3 = bfd_getl16(buffer);
        }
        (*info->fprintf_func)(info->stream, "%04x ", insn3);
    } else {
        (*info->fprintf_func)(info->stream, "     ");
    }

    int length = nanomips_dis(buf, memaddr, insn1, insn2, insn3);

    /* FIXME: Should probably use a hash table on the major opcode here.  */

    (*info->fprintf_func) (info->stream, "%s", buf);
    if (length > 0) {
        return length / 8;
    }

    info->insn_type = dis_noninsn;

    return insn3 ? 6 : insn2 ? 4 : 2;
}


namespace img
{
    address addr32(address a)
    {
        return a;
    }

    std::string format(const char *format, ...)
    {
        char buffer[256];
        va_list args;
        va_start(args, format);
        int err = vsprintf(buffer, format, args);
        if (err < 0) {
            perror(buffer);
        }
        va_end(args);
        return buffer;
    }

    std::string format(const char *format,
                       std::string s)
    {
        char buffer[256];

        sprintf(buffer, format, s.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       std::string s2)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), s2.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       std::string s2,
                       std::string s3)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       std::string s2,
                       std::string s3,
                       std::string s4)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
                                s4.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       std::string s2,
                       std::string s3,
                       std::string s4,
                       std::string s5)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
                                s4.c_str(), s5.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       uint64 d,
                       std::string s2)
    {
        char buffer[256];

        sprintf(buffer, format, d, s2.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       uint64 d,
                       std::string s2)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), d, s2.c_str());

        return buffer;
    }

    std::string format(const char *format,
                       std::string s1,
                       std::string s2,
                       uint64 d)
    {
        char buffer[256];

        sprintf(buffer, format, s1.c_str(), s2.c_str(), d);

        return buffer;
    }

    char as_char(int c)
    {
        return static_cast<char>(c);
    }
};


std::string to_string(img::address a)
{
    char buffer[256];
    sprintf(buffer, "0x%" PRIx64, a);
    return buffer;
}


uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
{
    return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
}


int64 sign_extend(int64 data, int msb)
{
    uint64 shift = 63 - msb;
    return (data << shift) >> shift;
}


uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
                               size_t register_list_size)
{
    if (index < register_list_size) {
        return register_list[index];
    }

    throw std::runtime_error(img::format(
                   "Invalid register mapping index %" PRIu64
                   ", size of list = %zu",
                   index, register_list_size));
}


/*
 * NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
 *
 *   Map a 4-bit code to the 5-bit register space according to this pattern:
 *
 *                              1                   0
 *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 *                    | | | | | | | | | | | | | | | |
 *                    | | | | | | | | | | | | | | | |
 *                    | | | | | | | | | | | └---------------┐
 *                    | | | | | | | | | | └---------------┐ |
 *                    | | | | | | | | | └---------------┐ | |
 *                    | | | | | | | | └---------------┐ | | |
 *                    | | | | | | | |         | | | | | | | |
 *                    | | | | | | | |         | | | | | | | |
 *    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
 *      3                   2                   1                   0
 *
 *   Used in handling following instructions:
 *
 *     - ADDU[4X4]
 *     - LW[4X4]
 *     - MOVEP[REV]
 *     - MUL[4X4]
 *     - SW[4X4]
 */
uint64 NMD::decode_gpr_gpr4(uint64 d)
{
    static uint64 register_list[] = {  8,  9, 10, 11,  4,  5,  6,  7,
                                      16, 17, 18, 19, 20, 21, 22, 23 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
 *
 *   Map a 4-bit code to the 5-bit register space according to this pattern:
 *
 *                              1                   0
 *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 *                    | | | | | | | | | | | | | | | |
 *                    | | | | | | | | | | | | └---------------------┐
 *                    | | | | | | | | | | | └---------------┐       |
 *                    | | | | | | | | | | └---------------┐ |       |
 *                    | | | | | | | | | └---------------┐ | |       |
 *                    | | | | | | | | └---------------┐ | | |       |
 *                    | | | | | | | |           | | | | | | |       |
 *                    | | | | | | | |           | | | | | | |       |
 *    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
 *      3                   2                   1                   0
 *
 *   This pattern is the same one used for 'gpr4' gpr encoding type, except for
 * the input value 3, that is mapped to the output value 0 instead of 11.
 *
 *   Used in handling following instructions:
 *
 *     - MOVE.BALC
 *     - MOVEP
 *     - SW[4X4]
 */
uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
{
    static uint64 register_list[] = {  8,  9, 10,  0,  4,  5,  6,  7,
                                      16, 17, 18, 19, 20, 21, 22, 23 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
 *
 *   Map a 3-bit code to the 5-bit register space according to this pattern:
 *
 *                            7 6 5 4 3 2 1 0
 *                            | | | | | | | |
 *                            | | | | | | | |
 *                            | | | └-----------------------┐
 *                            | | └-----------------------┐ |
 *                            | └-----------------------┐ | |
 *                            └-----------------------┐ | | |
 *                                    | | | |         | | | |
 *                            ┌-------┘ | | |         | | | |
 *                            | ┌-------┘ | |         | | | |
 *                            | | ┌-------┘ |         | | | |
 *                            | | | ┌-------┘         | | | |
 *                            | | | |                 | | | |
 *    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
 *      3                   2                   1                   0
 *
 *   Used in handling following instructions:
 *
 *     - ADDIU[R1.SP]
 *     - ADDIU[R2]
 *     - ADDU[16]
 *     - AND[16]
 *     - ANDI[16]
 *     - BEQC[16]
 *     - BEQZC[16]
 *     - BNEC[16]
 *     - BNEZC[16]
 *     - LB[16]
 *     - LBU[16]
 *     - LH[16]
 *     - LHU[16]
 *     - LI[16]
 *     - LW[16]
 *     - LW[GP16]
 *     - LWXS[16]
 *     - NOT[16]
 *     - OR[16]
 *     - SB[16]
 *     - SH[16]
 *     - SLL[16]
 *     - SRL[16]
 *     - SUBU[16]
 *     - SW[16]
 *     - XOR[16]
 */
uint64 NMD::decode_gpr_gpr3(uint64 d)
{
    static uint64 register_list[] = { 16, 17, 18, 19,  4,  5,  6,  7 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
 *     type
 *
 *   Map a 3-bit code to the 5-bit register space according to this pattern:
 *
 *                            7 6 5 4 3 2 1 0
 *                            | | | | | | | |
 *                            | | | | | | | └-----------------------┐
 *                            | | | └-----------------------┐       |
 *                            | | └-----------------------┐ |       |
 *                            | └-----------------------┐ | |       |
 *                            └-----------------------┐ | | |       |
 *                                    | | |           | | | |       |
 *                            ┌-------┘ | |           | | | |       |
 *                            | ┌-------┘ |           | | | |       |
 *                            | | ┌-------┘           | | | |       |
 *                            | | |                   | | | |       |
 *                            | | |                   | | | |       |
 *    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
 *      3                   2                   1                   0
 *
 *   This pattern is the same one used for 'gpr3' gpr encoding type, except for
 * the input value 0, that is mapped to the output value 0 instead of 16.
 *
 *   Used in handling following instructions:
 *
 *     - SB[16]
 *     - SH[16]
 *     - SW[16]
 *     - SW[GP16]
 */
uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
{
    static uint64 register_list[] = {  0, 17, 18, 19,  4,  5,  6,  7 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
 *
 *   Map a 2-bit code to the 5-bit register space according to this pattern:
 *
 *                                3 2 1 0
 *                                | | | |
 *                                | | | |
 *                                | | | └-------------------┐
 *                                | | └-------------------┐ |
 *                                | └-------------------┐ | |
 *                                └-------------------┐ | | |
 *                                                    | | | |
 *                                                    | | | |
 *    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
 *      3                   2                   1                   0
 *
 *   Used in handling following instructions:
 *
 *     - MOVEP
 *     - MOVEP[REV]
 */
uint64 NMD::decode_gpr_gpr2_reg1(uint64 d)
{
    static uint64 register_list[] = {  4,  5,  6,  7 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
 *
 *   Map a 2-bit code to the 5-bit register space according to this pattern:
 *
 *                                3 2 1 0
 *                                | | | |
 *                                | | | |
 *                                | | | └-----------------┐
 *                                | | └-----------------┐ |
 *                                | └-----------------┐ | |
 *                                └-----------------┐ | | |
 *                                                  | | | |
 *                                                  | | | |
 *    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
 *      3                   2                   1                   0
 *
 *   Used in handling following instructions:
 *
 *     - MOVEP
 *     - MOVEP[REV]
 */
uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
{
    static uint64 register_list[] = {  5,  6,  7,  8 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


/*
 * NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
 *
 *   Map a 1-bit code to the 5-bit register space according to this pattern:
 *
 *                                  1 0
 *                                  | |
 *                                  | |
 *                                  | └---------------------┐
 *                                  └---------------------┐ |
 *                                                        | |
 *                                                        | |
 *                                                        | |
 *                                                        | |
 *    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
 *      3                   2                   1                   0
 *
 *   Used in handling following instruction:
 *
 *     - MOVE.BALC
 */
uint64 NMD::decode_gpr_gpr1(uint64 d)
{
    static uint64 register_list[] = {  4,  5 };
    return renumber_registers(d, register_list,
               sizeof(register_list) / sizeof(register_list[0]));
}


uint64 NMD::copy(uint64 d)
{
    return d;
}


int64 NMD::copy(int64 d)
{
    return d;
}


int64 NMD::neg_copy(uint64 d)
{
    return 0ll - d;
}


int64 NMD::neg_copy(int64 d)
{
    return -d;
}


/* strange wrapper around  gpr3 */
uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
{
return decode_gpr_gpr3(d);
}


/* strange wrapper around  gpr3 */
uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
{
    return decode_gpr_gpr3(d);
}


/* nop - done by extraction function */
uint64 NMD::encode_s_from_address(uint64 d)
{
    return d;
}


/* nop - done by extraction function */
uint64 NMD::encode_u_from_address(uint64 d)
{
    return d;
}


/* nop - done by extraction function */
uint64 NMD::encode_s_from_s_hi(uint64 d)
{
    return d;
}


uint64 NMD::encode_count3_from_count(uint64 d)
{
    IMGASSERTONCE(d < 8);
    return d == 0ull ? 8ull : d;
}


uint64 NMD::encode_shift3_from_shift(uint64 d)
{
    IMGASSERTONCE(d < 8);
    return d == 0ull ? 8ull : d;
}


/* special value for load literal */
int64 NMD::encode_eu_from_s_li16(uint64 d)
{
    IMGASSERTONCE(d < 128);
    return d == 127 ? -1 : (int64)d;
}


uint64 NMD::encode_msbd_from_size(uint64 d)
{
    IMGASSERTONCE(d < 32);
    return d + 1;
}


uint64 NMD::encode_eu_from_u_andi16(uint64 d)
{
    IMGASSERTONCE(d < 16);
    if (d == 12) {
        return 0x00ffull;
    }
    if (d == 13) {
        return 0xffffull;
    }
    return d;
}


uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
{
    IMGASSERTONCE(0);
    return d;
}


/* save16 / restore16   ???? */
uint64 NMD::encode_rt1_from_rt(uint64 d)
{
    return d ? 31 : 30;
}


/* ? */
uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
{
    return d;
}


std::string NMD::save_restore_list(uint64 rt, uint64 count, uint64 gp)
{
    std::string str;

    for (uint64 counter = 0; counter != count; counter++) {
        bool use_gp = gp && (counter == count - 1);
        uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
        str += img::format(",%s", GPR(this_rt));
    }

    return str;
}


std::string NMD::GPR(uint64 reg)
{
    static const char *gpr_reg[32] = {
        "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
        "a4",   "a5",   "a6",   "a7",   "r12",  "r13",  "r14",  "r15",
        "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
        "r24",  "r25",  "k0",   "k1",   "gp",   "sp",   "fp",   "ra"
    };

    if (reg < 32) {
        return gpr_reg[reg];
    }

    throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
                                         reg));
}


std::string NMD::FPR(uint64 reg)
{
    static const char *fpr_reg[32] = {
        "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
        "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
        "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
        "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
    };

    if (reg < 32) {
        return fpr_reg[reg];
    }

    throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
                                         reg));
}


std::string NMD::AC(uint64 reg)
{
    static const char *ac_reg[4] = {
        "ac0",  "ac1",  "ac2",  "ac3"
    };

    if (reg < 4) {
        return ac_reg[reg];
    }

    throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
                                         reg));
}


std::string NMD::IMMEDIATE(uint64 value)
{
    return img::format("0x%" PRIx64, value);
}


std::string NMD::IMMEDIATE(int64 value)
{
    return img::format("%" PRId64, value);
}


std::string NMD::CPR(uint64 reg)
{
    /* needs more work */
    return img::format("CP%" PRIu64, reg);
}


std::string NMD::ADDRESS(uint64 value, int instruction_size)
{
    /* token for string replace */
    /* const char TOKEN_REPLACE = (char)0xa2; */
    img::address address = m_pc + value + instruction_size;
    /* symbol replacement */
    /* return img::as_char(TOKEN_REPLACE) + to_string(address); */
    return to_string(address);
}


uint64 NMD::extract_op_code_value(const uint16 * data, int size)
{
    switch (size) {
    case 16:
        return data[0];
    case 32:
        return ((uint64)data[0] << 16) | data[1];
    case 48:
        return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
    default:
        return data[0];
    }
}


int NMD::Disassemble(const uint16 * data, std::string & dis,
                     NMD::TABLE_ENTRY_TYPE & type)
{
    return Disassemble(data, dis, type, MAJOR, 2);
}


/*
 * Recurse through tables until the instruction is found then return
 * the string and size
 *
 * inputs:
 *      pointer to a word stream,
 *      disassember table and size
 * returns:
 *      instruction size    - negative is error
 *      disassembly string  - on error will constain error string
 */
int NMD::Disassemble(const uint16 * data, std::string & dis,
                     NMD::TABLE_ENTRY_TYPE & type, const Pool *table,
                     int table_size)
{
    try
    {
        for (int i = 0; i < table_size; i++) {
            uint64 op_code = extract_op_code_value(data,
                                 table[i].instructions_size);
            if ((op_code & table[i].mask) == table[i].value) {
                /* possible match */
                conditional_function cond = table[i].condition;
                if ((cond == 0) || (this->*cond)(op_code)) {
                    try
                    {
                        if (table[i].type == pool) {
                            return Disassemble(data, dis, type,
                                               table[i].next_table,
                                               table[i].next_table_size);
                        } else if ((table[i].type == instruction) ||
                                   (table[i].type == call_instruction) ||
                                   (table[i].type == branch_instruction) ||
                                   (table[i].type == return_instruction)) {
                            if ((table[i].attributes != 0) &&
                                (m_requested_instruction_categories &
                                 table[i].attributes) == 0) {
                                /*
                                 * failed due to instruction having
                                 * an ASE attribute and the requested version
                                 * not having that attribute
                                 */
                                dis = "ASE attribute missmatch";
                                return -5;
                            }
                            disassembly_function dis_fn = table[i].disassembly;
                            if (dis_fn == 0) {
                                dis = "disassembler failure - bad table entry";
                                return -6;
                            }
                            type = table[i].type;
                            dis = (this->*dis_fn)(op_code);
                            return table[i].instructions_size;
                        } else {
                            dis = "reserved instruction";
                            return -2;
                        }
                    }
                    catch (std::runtime_error & e)
                    {
                        dis = e.what();
                        return -3;          /* runtime error */
                    }
                }
            }
        }
    }
    catch (std::exception & e)
    {
        dis = e.what();
        return -4;          /* runtime error */
    }

    dis = "failed to disassemble";
    return -1;      /* failed to disassemble        */
}


uint64 NMD::extract_code_18_to_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 19);
    return value;
}


uint64 NMD::extract_shift3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 3);
    return value;
}


uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 9) << 3;
    return value;
}


uint64 NMD::extract_count_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 4);
    return value;
}


uint64 NMD::extract_rtz3_9_8_7(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 7, 3);
    return value;
}


uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 1, 17) << 1;
    return value;
}


int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 11, 10);
    value = sign_extend(value, 9);
    return value;
}


int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 11;
    value |= extract_bits(instruction, 1, 10) << 1;
    value = sign_extend(value, 11);
    return value;
}


uint64 NMD::extract_u_10(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 10, 1);
    return value;
}


uint64 NMD::extract_rtz4_27_26_25_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 3);
    value |= extract_bits(instruction, 25, 1) << 3;
    return value;
}


uint64 NMD::extract_sa_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 5);
    return value;
}


uint64 NMD::extract_shift_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 5);
    return value;
}


uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 7, 4) << 1;
    return value;
}


uint64 NMD::extract_hint_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_count3_14_13_12(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 12, 3);
    return value;
}


int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 31;
    value |= extract_bits(instruction, 2, 10) << 21;
    value |= extract_bits(instruction, 12, 9) << 12;
    value = sign_extend(value, 31);
    return value;
}


int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 7;
    value |= extract_bits(instruction, 1, 6) << 1;
    value = sign_extend(value, 7);
    return value;
}


uint64 NMD::extract_u2_10_9(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 9, 2);
    return value;
}


uint64 NMD::extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 10);
    return value;
}


uint64 NMD::extract_rs_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_u_2_1__s1(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 1, 2) << 1;
    return value;
}


uint64 NMD::extract_stripe_6(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 6, 1);
    return value;
}


uint64 NMD::extract_ac_13_12(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 14, 2);
    return value;
}


uint64 NMD::extract_shift_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_rdl_25_24(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 24, 1);
    return value;
}


int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 10;
    value |= extract_bits(instruction, 1, 9) << 1;
    value = sign_extend(value, 10);
    return value;
}


uint64 NMD::extract_eu_6_5_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 7);
    return value;
}


uint64 NMD::extract_shift_5_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 6);
    return value;
}


uint64 NMD::extract_count_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 4);
    return value;
}


uint64 NMD::extract_code_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 3);
    return value;
}


uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 12);
    return value;
}


uint64 NMD::extract_rs_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 5);
    return value;
}


uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 18) << 3;
    return value;
}


uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 4) << 2;
    return value;
}


uint64 NMD::extract_cofun_25_24_23(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 23);
    return value;
}


uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 3) << 2;
    return value;
}


uint64 NMD::extract_rd3_3_2_1(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 1, 3);
    return value;
}


uint64 NMD::extract_sa_15_14_13_12(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 12, 4);
    return value;
}


uint64 NMD::extract_rt_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_ru_7_6_5_4_3(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 5);
    return value;
}


uint64 NMD::extract_u_17_to_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 18);
    return value;
}


uint64 NMD::extract_rsz4_4_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 3);
    value |= extract_bits(instruction, 4, 1) << 3;
    return value;
}


int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 21;
    value |= extract_bits(instruction, 1, 20) << 1;
    value = sign_extend(value, 21);
    return value;
}


uint64 NMD::extract_op_25_to_3(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 23);
    return value;
}


uint64 NMD::extract_rs4_4_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 3);
    value |= extract_bits(instruction, 4, 1) << 3;
    return value;
}


uint64 NMD::extract_bit_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 3);
    return value;
}


uint64 NMD::extract_rt_41_40_39_38_37(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 37, 5);
    return value;
}


int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 16, 6);
    value = sign_extend(value, 5);
    return value;
}


uint64 NMD::extract_rd2_3_8(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 1) << 1;
    value |= extract_bits(instruction, 8, 1);
    return value;
}


uint64 NMD::extract_code_17_to_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 18);
    return value;
}


uint64 NMD::extract_size_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 2, 6) << 2;
    value |= extract_bits(instruction, 15, 1) << 8;
    value = sign_extend(value, 8);
    return value;
}


uint64 NMD::extract_u_15_to_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 16);
    return value;
}


uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 8);
    value |= extract_bits(instruction, 15, 1) << 8;
    value = sign_extend(value, 8);
    return value;
}


uint64 NMD::extract_stype_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_rtl_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 9, 1);
    return value;
}


uint64 NMD::extract_hs_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_sel_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 3);
    return value;
}


uint64 NMD::extract_lsb_4_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 5);
    return value;
}


uint64 NMD::extract_gp_2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 2, 1);
    return value;
}


uint64 NMD::extract_rt3_9_8_7(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 7, 3);
    return value;
}


uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_u_17_16_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 7);
    return value;
}


uint64 NMD::extract_cs_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_rt4_9_7_6_5(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 5, 3);
    value |= extract_bits(instruction, 9, 1) << 3;
    return value;
}


uint64 NMD::extract_msbt_10_9_8_7_6(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 6, 5);
    return value;
}


uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 6) << 2;
    return value;
}


uint64 NMD::extract_sa_15_14_13(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 13, 3);
    return value;
}


int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 14;
    value |= extract_bits(instruction, 1, 13) << 1;
    value = sign_extend(value, 14);
    return value;
}


uint64 NMD::extract_rs3_6_5_4(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 4, 3);
    return value;
}


uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 32) << 32;
    return value;
}


uint64 NMD::extract_shift_10_9_8_7_6(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 6, 5);
    return value;
}


uint64 NMD::extract_cs_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_shiftx_11_10_9_8_7_6(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 6, 6);
    return value;
}


uint64 NMD::extract_rt_9_8_7_6_5(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 5, 5);
    return value;
}


uint64 NMD::extract_op_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 7) << 2;
    return value;
}


uint64 NMD::extract_bit_16_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 6);
    return value;
}


uint64 NMD::extract_mask_20_19_18_17_16_15_14(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 14, 7);
    return value;
}


uint64 NMD::extract_eu_3_2_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 4);
    return value;
}


uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 4, 4) << 4;
    return value;
}


int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 3, 5) << 3;
    value |= extract_bits(instruction, 15, 1) << 8;
    value = sign_extend(value, 8);
    return value;
}


uint64 NMD::extract_ft_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 5);
    return value;
}


int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 16) << 16;
    value |= extract_bits(instruction, 16, 16);
    value = sign_extend(value, 31);
    return value;
}


uint64 NMD::extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 13, 8);
    return value;
}


uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 2, 16) << 2;
    return value;
}


uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 5);
    return value;
}


uint64 NMD::extract_c0s_20_19_18_17_16(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 16, 5);
    return value;
}


uint64 NMD::extract_code_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 2);
    return value;
}


int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 1) << 25;
    value |= extract_bits(instruction, 1, 24) << 1;
    value = sign_extend(value, 25);
    return value;
}


uint64 NMD::extract_u_1_0(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 2);
    return value;
}


uint64 NMD::extract_u_3_8__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 3, 1) << 3;
    value |= extract_bits(instruction, 8, 1) << 2;
    return value;
}


uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 5);
    return value;
}


uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 5) << 2;
    return value;
}


uint64 NMD::extract_rtz4_9_7_6_5(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 5, 3);
    value |= extract_bits(instruction, 9, 1) << 3;
    return value;
}


uint64 NMD::extract_sel_15_14_13_12_11(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 11, 5);
    return value;
}


uint64 NMD::extract_ct_25_24_23_22_21(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 21, 5);
    return value;
}


uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 2, 19) << 2;
    return value;
}


int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
{
    int64 value = 0;
    value |= extract_bits(instruction, 0, 3);
    value |= extract_bits(instruction, 4, 1) << 3;
    value = sign_extend(value, 3);
    return value;
}


uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
{
    uint64 value = 0;
    value |= extract_bits(instruction, 0, 4) << 1;
    return value;
}



bool NMD::ADDIU_32__cond(uint64 instruction)
{
    uint64 rt = extract_rt_25_24_23_22_21(instruction);
    return rt != 0;
}


bool NMD::ADDIU_RS5__cond(uint64 instruction)
{
    uint64 rt = extract_rt_9_8_7_6_5(instruction);
    return rt != 0;
}


bool NMD::BALRSC_cond(uint64 instruction)
{
    uint64 rt = extract_rt_25_24_23_22_21(instruction);
    return rt != 0;
}


bool NMD::BEQC_16__cond(uint64 instruction)
{
    uint64 rs3 = extract_rs3_6_5_4(instruction);
    uint64 rt3 = extract_rt3_9_8_7(instruction);
    uint64 u = extract_u_3_2_1_0__s1(instruction);
    return rs3 < rt3 && u != 0;
}


bool NMD::BNEC_16__cond(uint64 instruction)
{
    uint64 rs3 = extract_rs3_6_5_4(instruction);
    uint64 rt3 = extract_rt3_9_8_7(instruction);
    uint64 u = extract_u_3_2_1_0__s1(instruction);
    return rs3 >= rt3 && u != 0;
}


bool NMD::MOVE_cond(uint64 instruction)
{
    uint64 rt = extract_rt_9_8_7_6_5(instruction);
    return rt != 0;
}


bool NMD::P16_BR1_cond(uint64 instruction)
{
    uint64 u = extract_u_3_2_1_0__s1(instruction);
    return u != 0;
}


bool NMD::PREF_S9__cond(uint64 instruction)
{
    uint64 hint = extract_hint_25_24_23_22_21(instruction);
    return hint != 31;
}


bool NMD::PREFE_cond(uint64 instruction)
{
    uint64 hint = extract_hint_25_24_23_22_21(instruction);
    return hint != 31;
}


bool NMD::SLTU_cond(uint64 instruction)
{
    uint64 rd = extract_rd_15_14_13_12_11(instruction);
    return rd != 0;
}



/*
 * ABS.D fd, fs - Floating Point Absolute Value
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  010001     00000          000101
 *    fmt -----
 *               fs -----
 *                    fd -----
 */
std::string NMD::ABS_D(uint64 instruction)
{
    uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string fs = FPR(copy(fs_value));
    std::string fd = FPR(copy(fd_value));

    return img::format("ABS.D %s, %s", fd, fs);
}


/*
 * ABS.S fd, fs - Floating Point Absolute Value
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  010001     00000          000101
 *    fmt -----
 *               fd -----
 *                    fs -----
 */
std::string NMD::ABS_S(uint64 instruction)
{
    uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string fs = FPR(copy(fs_value));
    std::string fd = FPR(copy(fd_value));

    return img::format("ABS.S %s, %s", fd, fs);
}


/*
 * ABSQ_S.PH rt, rs - Find Absolute Value of Two Fractional Halfwords
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0001000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ABSQ_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("ABSQ_S.PH %s, %s", rt, rs);
}


/*
 * ABSQ_S.QB rt, rs - Find Absolute Value of Four Fractional Byte Values
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0000000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ABSQ_S_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("ABSQ_S.QB %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ABSQ_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("ABSQ_S.W %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ACLR(uint64 instruction)
{
    uint64 bit_value = extract_bit_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string bit = IMMEDIATE(copy(bit_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("ACLR %s, %s(%s)", bit, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADD %s, %s, %s", rd, rs, rt);
}


/*
 * ADD.D fd, fs, ft - Floating Point Add
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  010001                    000101
 *    fmt -----
 *          ft -----
 *               fs -----
 *                    fd -----
 */
std::string NMD::ADD_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));
    std::string fd = FPR(copy(fd_value));

    return img::format("ADD.D %s, %s, %s", fd, fs, ft);
}


/*
 * ADD.S fd, fs, ft - Floating Point Add
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  010001                    000101
 *    fmt -----
 *          ft -----
 *               fs -----
 *                    fd -----
 */
std::string NMD::ADD_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));
    std::string fd = FPR(copy(fd_value));

    return img::format("ADD.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_15_to_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ADDIU %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("ADDIU %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_GP48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("ADDIU %s, $%d, %s", rt, 28, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_GP_B_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ADDIU %s, $%d, %s", rt, 28, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_GP_W_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_to_2__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ADDIU %s, $%d, %s", rt, 28, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_NEG_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(neg_copy(u_value));

    return img::format("ADDIU %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_R1_SP_(uint64 instruction)
{
    uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
    uint64 rt3_value = extract_rt3_9_8_7(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ADDIU %s, $%d, %s", rt3, 29, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          0010000100111111
 *     rt -----
 *          rs -----
 */
std::string NMD::ADDIU_R2_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_2_1_0__s2(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ADDIU %s, %s, %s", rt3, rs3, u);
}


/*
 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
 *
 *  5432109876543210
 *  100100      1
 *     rt -----
 *           s - ---
 */
std::string NMD::ADDIU_RS5_(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
    int64 s_value = extract_s__se3_4_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("ADDIU %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDIUPC_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("ADDIUPC %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDIUPC_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 6);

    return img::format("ADDIUPC %s, %s", rt, s);
}


/*
 * ADDQ.PH rd, rt, rs - Add Fractional Halfword Vectors
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00000001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQ_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQ.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQ_S.PH rd, rt, rs - Add Fractional Halfword Vectors
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10000001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQ_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQ_S.W rd, rt, rs - Add Fractional Words
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1100000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQ_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH.PH rd, rt, rs - Add Fractional Halfword Vectors And Shift Right
 *                       to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQH_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQH.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.PH rd, rt, rs - Add Fractional Halfword Vectors And Shift Right
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQH_R_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQH_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDQH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDQH.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDSC rd, rt, rs - Add Signed Word and Set Carry Bit
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDSC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDSC %s, %s, %s", rd, rs, rt);
}


/*
 * ADDU[16] rd3, rs3, rt3 -
 *
 *  5432109876543210
 *  101100         0
 *    rt3 ---
 *       rs3 ---
 *          rd3 ---
 */
std::string NMD::ADDU_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 rd3_value = extract_rd3_3_2_1(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));

    return img::format("ADDU %s, %s, %s", rd3, rs3, rt3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_4X4_(uint64 instruction)
{
    uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
    uint64 rs4_value = extract_rs4_4_2_1_0(instruction);

    std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
    std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));

    return img::format("ADDU %s, %s", rs4, rt4);
}


/*
 * ADDU.PH rd, rt, rs - Unsigned Add Integer Halfwords
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00100001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDU.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00011001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDU.QB %s, %s, %s", rd, rs, rt);
}


/*
 * ADDU_S.PH rd, rt, rs - Unsigned Add Integer Halfwords
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10100001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10011001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDU_S_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
}


/*
 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
 *                       to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00101001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDUH_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDUH.QB %s, %s, %s", rd, rs, rt);
}


/*
 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               10101001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDUH_R_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
}

/*
 * ADDWC rd, rt, rs - Add Word with Carry Bit
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1111000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ADDWC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ADDWC %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ALUIPC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
}


/*
 * AND[16] rt3, rs3 -
 *
 *  5432109876543210
 *  101100
 *    rt3 ---
 *       rs3 ---
 *           eu ----
 */
std::string NMD::AND_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("AND %s, %s", rs3, rt3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::AND_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("AND %s, %s, %s", rd, rs, rt);
}


/*
 * ANDI rt, rs, u -
 *
 *  5432109876543210
 *  101100
 *    rt3 ---
 *       rs3 ---
 *           eu ----
 */
std::string NMD::ANDI_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 eu_value = extract_eu_3_2_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string eu = IMMEDIATE(encode_eu_from_u_andi16(eu_value));

    return img::format("ANDI %s, %s, %s", rt3, rs3, eu);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ANDI_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ANDI %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::APPEND(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("APPEND %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ASET(uint64 instruction)
{
    uint64 bit_value = extract_bit_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string bit = IMMEDIATE(copy(bit_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("ASET %s, %s(%s)", bit, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BALC_16_(uint64 instruction)
{
    int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);

    std::string s = ADDRESS(encode_s_from_address(s_value), 2);

    return img::format("BALC %s", s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BALC_32_(uint64 instruction)
{
    int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);

    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BALC %s", s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BALRSC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("BALRSC %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BBEQZC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string bit = IMMEDIATE(copy(bit_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BBEQZC %s, %s, %s", rt, bit, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BBNEZC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string bit = IMMEDIATE(copy(bit_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BBNEZC %s, %s, %s", rt, bit, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC_16_(uint64 instruction)
{
    int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);

    std::string s = ADDRESS(encode_s_from_address(s_value), 2);

    return img::format("BC %s", s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC_32_(uint64 instruction)
{
    int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);

    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BC %s", s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC1EQZC(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BC1EQZC %s, %s", ft, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC1NEZC(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BC1NEZC %s, %s", ft, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC2EQZC(uint64 instruction)
{
    uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string ct = CPR(copy(ct_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BC2EQZC %s, %s", ct, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BC2NEZC(uint64 instruction)
{
    uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string ct = CPR(copy(ct_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BC2NEZC %s, %s", ct, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BEQC_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_3_2_1_0__s1(instruction);

    std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = ADDRESS(encode_u_from_address(u_value), 2);

    return img::format("BEQC %s, %s, %s", rs3, rt3, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BEQC_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BEQC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BEQIC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BEQIC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BEQZC_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 2);

    return img::format("BEQZC %s, %s", rt3, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BGEC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BGEC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BGEIC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BGEIC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BGEIUC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BGEIUC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BGEUC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BGEUC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BLTC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BLTC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BLTIC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BLTIC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BLTIUC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BLTIUC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BLTUC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BLTUC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BNEC_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_3_2_1_0__s1(instruction);

    std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = ADDRESS(encode_u_from_address(u_value), 2);

    return img::format("BNEC %s, %s, %s", rs3, rt3, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BNEC_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BNEC %s, %s, %s", rs, rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BNEIC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
    int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BNEIC %s, %s, %s", rt, u, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BNEZC_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 2);

    return img::format("BNEZC %s, %s", rt3, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BPOSGE32C(uint64 instruction)
{
    int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);

    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("BPOSGE32C %s", s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BREAK_16_(uint64 instruction)
{
    uint64 code_value = extract_code_2_1_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("BREAK %s", code);
}


/*
 * BREAK code - Break. Cause a Breakpoint exception
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BREAK_32_(uint64 instruction)
{
    uint64 code_value = extract_code_18_to_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("BREAK %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::BRSC(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));

    return img::format("BRSC %s", rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CACHE(uint64 instruction)
{
    uint64 op_value = extract_op_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string op = IMMEDIATE(copy(op_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("CACHE %s, %s(%s)", op, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CACHEE(uint64 instruction)
{
    uint64 op_value = extract_op_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string op = IMMEDIATE(copy(op_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("CACHEE %s, %s(%s)", op, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CEIL_L_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CEIL.L.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CEIL_L_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CEIL.L.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CEIL_W_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CEIL.W.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CEIL_W_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CEIL.W.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CFC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("CFC1 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CFC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("CFC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CLASS_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CLASS.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CLASS_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CLASS.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CLO(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("CLO %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CLZ(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("CLZ %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_AF_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.AF.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_AF_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.AF.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_EQ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_EQ_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMP.EQ.PH %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_EQ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.LE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LE_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMP.LE.PH %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.LE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.LT.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LT_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMP.LT.PH %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_LT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.LT.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_NE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.NE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_NE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.NE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_OR_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.OR.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_OR_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.OR.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SAF_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SAF_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SEQ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SEQ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SLE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SLE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SLT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SLT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SNE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SNE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SOR_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SOR_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUEQ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUEQ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SULE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SULE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SULT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SULT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUN_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUNE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUNE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_SUN_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UEQ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UEQ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_ULE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_ULE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_ULT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_ULT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UN_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UN.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UNE_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UNE_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMP_UN_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("CMP.UN.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGDU_LE_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGDU_LT_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGU_EQ_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGU_LE_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPGU_LT_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPU_EQ_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPU.EQ.QB %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPU_LE_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPU.LE.QB %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CMPU_LT_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("CMPU.LT.QB %s, %s", rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::COP2_1(uint64 instruction)
{
    uint64 cofun_value = extract_cofun_25_24_23(instruction);

    std::string cofun = IMMEDIATE(copy(cofun_value));

    return img::format("COP2_1 %s", cofun);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CTC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("CTC1 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CTC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("CTC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_D_L(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.D.L %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_D_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.D.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_D_W(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.D.W %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_L_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.L.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_L_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.L.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_S_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.S.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_S_L(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.S.L %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_S_PL(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.S.PL %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_S_PU(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.S.PU %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_S_W(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.S.W %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_W_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.W.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::CVT_W_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("CVT.W.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DADDIU_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("DADDIU %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DADDIU_NEG_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(neg_copy(u_value));

    return img::format("DADDIU %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DADDIU_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("DADDIU %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DADD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DADD %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DADDU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DADDU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DCLO(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("DCLO %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DCLZ(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("DCLZ %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DDIV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DDIV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DDIVU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DDIVU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DERET(uint64 instruction)
{
    (void)instruction;

    return "DERET ";
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DEXTM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string lsb = IMMEDIATE(copy(lsb_value));
    std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));

    return img::format("DEXTM %s, %s, %s, %s", rt, rs, lsb, msbd);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DEXT(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string lsb = IMMEDIATE(copy(lsb_value));
    std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));

    return img::format("DEXT %s, %s, %s, %s", rt, rs, lsb, msbd);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DEXTU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string lsb = IMMEDIATE(copy(lsb_value));
    std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));

    return img::format("DEXTU %s, %s, %s, %s", rt, rs, lsb, msbd);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DINSM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
    std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
    /* !!!!!!!!!! - no conversion function */

    return img::format("DINSM %s, %s, %s, %s", rt, rs, pos, size);
    /* hand edited */
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DINS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
    std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
    /* !!!!!!!!!! - no conversion function */

    return img::format("DINS %s, %s, %s, %s", rt, rs, pos, size);
    /* hand edited */
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DINSU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
    std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
    /* !!!!!!!!!! - no conversion function */

    return img::format("DINSU %s, %s, %s, %s", rt, rs, pos, size);
    /* hand edited */
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("DI %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DIV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DIV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DIV_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("DIV.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DIV_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("DIV.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DIVU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DIVU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DLSA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
    uint64 u2_value = extract_u2_10_9(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string u2 = IMMEDIATE(copy(u2_value));

    return img::format("DLSA %s, %s, %s, %s", rd, rs, rt, u2);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DLUI_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    uint64 u_value = extract_u_31_to_0__s32(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("DLUI %s, %s", rt, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMFC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("DMFC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMFC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("DMFC1 %s, %s", rt, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMFC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("DMFC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMFGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("DMFGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMOD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMOD %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMODU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMODU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMTC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("DMTC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMTC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("DMTC1 %s, %s", rt, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMTC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("DMTC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMTGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("DMTGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMT(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("DMT %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMUH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMUH %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMUHU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMUHU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMUL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMUL %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DMULU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DMULU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPA.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAQ_SA_L_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAQX_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAU_H_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAU_H_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPAX_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPS_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPS.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSQ_SA_L_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSQX_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSU_H_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSU_H_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DPSX_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 * DROTR -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DROTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DROTR %s, %s, %s", rt, rs, shift);
}


/*
 * DROTR[32] -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0110
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DROTR32(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DROTR32 %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DROTRV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DROTRV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DROTX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
    uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));
    std::string shiftx = IMMEDIATE(copy(shiftx_value));

    return img::format("DROTX %s, %s, %s, %s", rt, rs, shift, shiftx);
}


/*
 * DSLL -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0000
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSLL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSLL %s, %s, %s", rt, rs, shift);
}


/*
 * DSLL[32] -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0000
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSLL32(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSLL32 %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DSLLV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DSLLV %s, %s, %s", rd, rs, rt);
}


/*
 * DSRA -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0100
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSRA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSRA %s, %s, %s", rt, rs, shift);
}


/*
 * DSRA[32] -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0100
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSRA32(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSRA32 %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DSRAV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DSRAV %s, %s, %s", rd, rs, rt);
}


/*
 * DSRL -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0100
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSRL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSRL %s, %s, %s", rt, rs, shift);
}


/*
 * DSRL[32] -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  10o000          1100xxx0010
 *     rt -----
 *          rs -----
 *                       shift -----
 */
std::string NMD::DSRL32(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("DSRL32 %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DSRLV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DSRLV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DSUB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DSUB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DSUBU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("DSUBU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DVPE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("DVPE %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::DVP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("DVP %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EHB(uint64 instruction)
{
    (void)instruction;

    return "EHB ";
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("EI %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EMT(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("EMT %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ERET(uint64 instruction)
{
    (void)instruction;

    return "ERET ";
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ERETNC(uint64 instruction)
{
    (void)instruction;

    return "ERETNC ";
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EVP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("EVP %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EVPE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("EVPE %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXT(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string lsb = IMMEDIATE(copy(lsb_value));
    std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));

    return img::format("EXT %s, %s, %s, %s", rt, rs, lsb, msbd);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
    uint64 shift_value = extract_shift_10_9_8_7_6(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTD %s, %s, %s, %s", rd, rs, rt, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTD32(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
    uint64 shift_value = extract_shift_10_9_8_7_6(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTD32 %s, %s, %s, %s", rd, rs, rt, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTPDP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 size_value = extract_size_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string size = IMMEDIATE(copy(size_value));

    return img::format("EXTPDP %s, %s, %s", rt, ac, size);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTPDPV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTPDPV %s, %s, %s", rt, ac, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 size_value = extract_size_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string size = IMMEDIATE(copy(size_value));

    return img::format("EXTP %s, %s, %s", rt, ac, size);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTPV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTPV %s, %s, %s", rt, ac, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTR_RS_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTR_RS.W %s, %s, %s", rt, ac, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTR_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTR_R.W %s, %s, %s", rt, ac, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTR_S_H(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTR_S.H %s, %s, %s", rt, ac, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTR_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTR.W %s, %s, %s", rt, ac, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTRV_RS_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTRV_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTRV_S_H(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::EXTRV_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("EXTRV.W %s, %s, %s", rt, ac, rs);
}


/*
 * EXTW - Extract Word
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000                    011111
 *     rt -----
 *          rs -----
 *               rd -----
 *                 shift -----
 */
std::string NMD::EXTW(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
    uint64 shift_value = extract_shift_10_9_8_7_6(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("EXTW %s, %s, %s, %s", rd, rs, rt, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::FLOOR_L_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("FLOOR.L.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::FLOOR_L_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("FLOOR.L.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::FLOOR_W_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("FLOOR.W.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::FLOOR_W_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("FLOOR.W.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::FORK(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("FORK %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::HYPCALL(uint64 instruction)
{
    uint64 code_value = extract_code_17_to_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("HYPCALL %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::HYPCALL_16_(uint64 instruction)
{
    uint64 code_value = extract_code_1_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("HYPCALL %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::INS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
    uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
    std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
    /* !!!!!!!!!! - no conversion function */

    return img::format("INS %s, %s, %s, %s", rt, rs, pos, size);
    /* hand edited */
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::INSV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("INSV %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::IRET(uint64 instruction)
{
    (void)instruction;

    return "IRET ";
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::JALRC_16_(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("JALRC $%d, %s", 31, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::JALRC_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("JALRC %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::JALRC_HB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("JALRC.HB %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::JRC(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);

    std::string rt = GPR(copy(rt_value));

    return img::format("JRC %s", rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LB_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("LB %s, %s(%s)", rt3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LB_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LB %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LB_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LB %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LB_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LB %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LBE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBU_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("LBU %s, %s(%s)", rt3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBU_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LBU %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBU_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LBU %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBU_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LBU %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBUE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LBUE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBUX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LBUX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LBX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LBX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LD_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_to_3__s3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LD %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LD_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LD %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LD_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LD %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC1_GP_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_2__s2(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LDC1 %s, %s($%d)", ft, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC1_S9_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LDC1 %s, %s(%s)", ft, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC1_U12_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LDC1 %s, %s(%s)", ft, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC1XS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LDC1XS %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC1X(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LDC1X %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDC2(uint64 instruction)
{
    uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ct = CPR(copy(ct_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LDC2 %s, %s(%s)", ct, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("LDM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDPC_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 6);

    return img::format("LDPC %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LDX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LDXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LDXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LH_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_2_1__s1(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("LH %s, %s(%s)", rt3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LH_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_1__s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LH %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LH_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LH %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LH_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LH %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LHE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHU_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_2_1__s1(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("LHU %s, %s(%s)", rt3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHU_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_1__s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LHU %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHU_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LHU %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHU_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LHU %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHUE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LHUE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHUX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LHUX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHUXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LHUXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LHXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LHX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LHX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LI_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string eu = IMMEDIATE(encode_eu_from_s_li16(eu_value));

    return img::format("LI %s, %s", rt3, eu);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LI_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("LI %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LL %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LLD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LLD %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LLDP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LLDP %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LLE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LLE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LLWP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LLWP %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LLWPE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LLWPE %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LSA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
    uint64 u2_value = extract_u2_10_9(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));
    std::string u2 = IMMEDIATE(copy(u2_value));

    return img::format("LSA %s, %s, %s, %s", rd, rs, rt, u2);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LUI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("LUI %s, %%hi(%s)", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_3_2_1_0__s2(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("LW %s, %s(%s)", rt3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_4X4_(uint64 instruction)
{
    uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
    uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
    uint64 u_value = extract_u_3_8__s2(instruction);

    std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));

    return img::format("LW %s, %s(%s)", rt4, u, rs4);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_to_2__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LW %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_GP16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LW %s, %s($%d)", rt3, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LW %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_SP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
    uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LW %s, %s($%d)", rt, u, 29);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LW_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LW %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC1_GP_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_2__s2(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LWC1 %s, %s($%d)", ft, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC1_S9_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWC1 %s, %s(%s)", ft, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC1_U12_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWC1 %s, %s(%s)", ft, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC1X(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWC1X %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC1XS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWC1XS %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWC2(uint64 instruction)
{
    uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ct = CPR(copy(ct_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWC2 %s, %s(%s)", ct, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("LWM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWPC_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 6);

    return img::format("LWPC %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWU_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_2__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("LWU %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWU_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWU %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWU_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("LWU %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWUX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWUX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWUXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWUXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWXS_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 rd3_value = extract_rd3_3_2_1(instruction);

    std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string rt3 = IMMEDIATE(decode_gpr_gpr3(rt3_value));

    return img::format("LWXS %s, %s(%s)", rd3, rs3, rt3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::LWXS_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("LWXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MADD_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MADD %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MADDF_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MADDF.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MADDF_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MADDF.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MADDU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MADDU %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAQ_S_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAQ_S_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAX_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MAX.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAX_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MAX.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAXA_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MAXA.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MAXA_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MAXA.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MFC1 %s, %s", rt, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("MFC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFHC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MFHC1 %s, %s", rt, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("MFHC2 %s, %s", rt, cs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFHGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHI_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));

    return img::format("MFHI %s, %s", rt, ac);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFHTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
    uint64 u_value = extract_u_10(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = IMMEDIATE(copy(c0s_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFHTR %s, %s, %s, %s", rt, c0s, u, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFLO_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ac = AC(copy(ac_value));

    return img::format("MFLO %s, %s", rt, ac);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MFTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
    uint64 u_value = extract_u_10(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = IMMEDIATE(copy(c0s_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MFTR %s, %s, %s, %s", rt, c0s, u, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MIN_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MIN.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MIN_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MIN.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MINA_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MINA.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MINA_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MINA.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MOD %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MODSUB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MODSUB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MODU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MODU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOV_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MOV.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOV_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MOV.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVE_BALC(uint64 instruction)
{
    uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
    uint64 rd1_value = extract_rdl_25_24(instruction);
    int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);

    std::string rd1 = GPR(decode_gpr_gpr1(rd1_value));
    std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 4);

    return img::format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVEP(uint64 instruction)
{
    uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
    uint64 rd2_value = extract_rd2_3_8(instruction);
    uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);

    std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
    std::string re2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
    /* !!!!!!!!!! - no conversion function */
    std::string rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value));
    std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));

    return img::format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
    /* hand edited */
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVEP_REV_(uint64 instruction)
{
    uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
    uint64 rd2_value = extract_rd2_3_8(instruction);
    uint64 rs4_value = extract_rs4_4_2_1_0(instruction);

    std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
    std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
    std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
    std::string rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
    /* !!!!!!!!!! - no conversion function */

    return img::format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
    /* hand edited */
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVE(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
    uint64 rs_value = extract_rs_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("MOVE %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVN(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MOVN %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MOVZ(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MOVZ %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MSUB_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MSUB %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MSUBF_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MSUBF.D %s, %s, %s", fd, fs, ft);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MSUBF_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MSUBF.S %s, %s, %s", fd, fs, ft);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MSUBU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MSUBU %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTC0 %s, %s, %s", rt, c0s, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MTC1 %s, %s", rt, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("MTC2 %s, %s", rt, cs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTHC0 %s, %s, %s", rt, c0s, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHC1(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("MTHC1 %s, %s", rt, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHC2(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 cs_value = extract_cs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string cs = CPR(copy(cs_value));

    return img::format("MTHC2 %s, %s", rt, cs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHGC0(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = CPR(copy(c0s_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTHGC0 %s, %s, %s", rt, c0s, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHI_DSP_(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));

    return img::format("MTHI %s, %s", rs, ac);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHLIP(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));

    return img::format("MTHLIP %s, %s", rs, ac);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTHTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
    uint64 u_value = extract_u_10(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = IMMEDIATE(copy(c0s_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTHTR %s, %s, %s, %s", rt, c0s, u, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTLO_DSP_(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));

    return img::format("MTLO %s, %s", rs, ac);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MTTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
    uint64 u_value = extract_u_10(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string c0s = IMMEDIATE(copy(c0s_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("MTTR %s, %s, %s, %s", rt, c0s, u, sel);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MUH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUHU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MUHU %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MUL %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_4X4_(uint64 instruction)
{
    uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
    uint64 rs4_value = extract_rs4_4_2_1_0(instruction);

    std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
    std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));

    return img::format("MUL %s, %s", rs4, rt4);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MUL.D %s, %s, %s", fd, fs, ft);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MUL.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MUL_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MUL_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("MUL.S %s, %s, %s", fd, fs, ft);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULQ_RS_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULQ_RS_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULQ_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULQ_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULQ_S.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULSA_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULT_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULT %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULTU_DSP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string ac = AC(copy(ac_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULTU %s, %s, %s", ac, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::MULU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("MULU %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NEG_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("NEG.D %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NEG_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("NEG.S %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NOP_16_(uint64 instruction)
{
    (void)instruction;

    return "NOP ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NOP_32_(uint64 instruction)
{
    (void)instruction;

    return "NOP ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NOR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("NOR %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::NOT_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("NOT %s, %s", rt3, rs3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::OR_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);

    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));

    return img::format("OR %s, %s", rs3, rt3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::OR_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("OR %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ORI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("ORI %s, %s, %s", rt, rs, u);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PACKRL_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PACKRL.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PAUSE(uint64 instruction)
{
    (void)instruction;

    return "PAUSE ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PICK_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PICK.PH %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PICK_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PICK.QB %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQ_W_PHL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQ.W.PHL %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQ_W_PHR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQ.W.PHR %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQU_PH_QBLA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQU.PH.QBLA %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQU_PH_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQU.PH.QBL %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQU_PH_QBRA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQU.PH.QBRA %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEQU_PH_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEQU.PH.QBR %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEU_PH_QBLA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEU.PH.QBLA %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEU_PH_QBL(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEU.PH.QBL %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEU_PH_QBRA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEU.PH.QBRA %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECEU_PH_QBR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PRECEU.PH.QBR %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECR_QB_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("PRECR_SRA.PH.W %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("PRECR_SRA_R.PH.W %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECRQ_PH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECRQ_QB_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PREF_S9_(uint64 instruction)
{
    uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string hint = IMMEDIATE(copy(hint_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PREF %s, %s(%s)", hint, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PREF_U12_(uint64 instruction)
{
    uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string hint = IMMEDIATE(copy(hint_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PREF %s, %s(%s)", hint, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PREFE(uint64 instruction)
{
    uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string hint = IMMEDIATE(copy(hint_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("PREFE %s, %s(%s)", hint, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::PREPEND(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("PREPEND %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RADDU_W_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("RADDU.W.QB %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RDDSP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string mask = IMMEDIATE(copy(mask_value));

    return img::format("RDDSP %s, %s", rt, mask);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RDHWR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
    uint64 sel_value = extract_sel_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string hs = CPR(copy(hs_value));
    std::string sel = IMMEDIATE(copy(sel_value));

    return img::format("RDHWR %s, %s, %s", rt, hs, sel);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RDPGPR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("RDPGPR %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RECIP_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RECIP.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RECIP_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RECIP.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::REPL_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));

    return img::format("REPL.PH %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::REPL_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("REPL.QB %s, %s", rt, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::REPLV_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("REPLV.PH %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::REPLV_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("REPLV.QB %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RESTORE_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 count_value = extract_count_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
    uint64 gp_value = extract_gp_2(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    return img::format("RESTORE %s%s", u,
               save_restore_list(rt_value, count_value, gp_value));
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RESTORE_JRC_16_(uint64 instruction)
{
    uint64 rt1_value = extract_rtl_11(instruction);
    uint64 u_value = extract_u_7_6_5_4__s4(instruction);
    uint64 count_value = extract_count_3_2_1_0(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    return img::format("RESTORE.JRC %s%s", u,
        save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RESTORE_JRC_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 count_value = extract_count_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
    uint64 gp_value = extract_gp_2(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    return img::format("RESTORE.JRC %s%s", u,
               save_restore_list(rt_value, count_value, gp_value));
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RESTOREF(uint64 instruction)
{
    uint64 count_value = extract_count_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    std::string count = IMMEDIATE(copy(count_value));

    return img::format("RESTOREF %s, %s", u, count);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RINT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RINT.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RINT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RINT.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROTR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("ROTR %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROTRV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("ROTRV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROTX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
    uint64 stripe_value = extract_stripe_6(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));
    std::string shiftx = IMMEDIATE(copy(shiftx_value));
    std::string stripe = IMMEDIATE(copy(stripe_value));

    return img::format("ROTX %s, %s, %s, %s, %s",
                       rt, rs, shift, shiftx, stripe);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROUND_L_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("ROUND.L.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROUND_L_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("ROUND.L.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROUND_W_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("ROUND.W.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::ROUND_W_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("ROUND.W.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RSQRT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RSQRT.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               x1110000101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::RSQRT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("RSQRT.S %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SAVE_16_(uint64 instruction)
{
    uint64 rt1_value = extract_rtl_11(instruction);
    uint64 u_value = extract_u_7_6_5_4__s4(instruction);
    uint64 count_value = extract_count_3_2_1_0(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    return img::format("SAVE %s%s", u,
        save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SAVE_32_(uint64 instruction)
{
    uint64 count_value = extract_count_19_18_17_16(instruction);
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
    uint64 gp_value = extract_gp_2(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    return img::format("SAVE %s%s", u,
               save_restore_list(rt_value, count_value, gp_value));
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SAVEF(uint64 instruction)
{
    uint64 count_value = extract_count_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);

    std::string u = IMMEDIATE(copy(u_value));
    std::string count = IMMEDIATE(copy(count_value));

    return img::format("SAVEF %s, %s", u, count);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SB_16_(uint64 instruction)
{
    uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_1_0(instruction);

    std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("SB %s, %s(%s)", rtz3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SB_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SB %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SB_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SB %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SB_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SB %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SBE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SBE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SBX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SBX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SC(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SC %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SCD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SCD %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SCDP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SCDP %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SCE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SCE %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SCWP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SCWP %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SCWPE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ru_value = extract_ru_7_6_5_4_3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string ru = GPR(copy(ru_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SCWPE %s, %s, (%s)", rt, ru, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SD_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_to_3__s3(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SD %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SD_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SD %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SD_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SD %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDBBP_16_(uint64 instruction)
{
    uint64 code_value = extract_code_2_1_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("SDBBP %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDBBP_32_(uint64 instruction)
{
    uint64 code_value = extract_code_18_to_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("SDBBP %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC1_GP_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_2__s2(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SDC1 %s, %s($%d)", ft, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC1_S9_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SDC1 %s, %s(%s)", ft, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC1_U12_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SDC1 %s, %s(%s)", ft, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC1X(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SDC1X %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC1XS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SDC1XS %s, %s(%s)", ft, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDC2(uint64 instruction)
{
    uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string cs = CPR(copy(cs_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SDC2 %s, %s(%s)", cs, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("SDM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDPC_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 6);

    return img::format("SDPC %s, %s", rt, s);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SDXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SDX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SDX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SEB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SEB %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SEH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SEH %s, %s", rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SEL_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SEL.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SEL_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SEL.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SELEQZ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SELEQZ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SELEQZ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SELEQZ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SELNEZ_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SELNEZ.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SELNEZ_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SELNEZ.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SEQI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SEQI %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SH_16_(uint64 instruction)
{
    uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_2_1__s1(instruction);

    std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("SH %s, %s(%s)", rtz3, u, rs3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SH_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_1__s1(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SH %s, %s($%d)", rt, u, 28);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SH_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SH %s, %s(%s)", rt, s, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SH_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SH %s, %s(%s)", rt, u, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHE %s, %s(%s)", rt, s, rs);
}


/*
 * SHILO ac, shift - Shift an Accumulator Value Leaving the Result in the Same
 *                     Accumulator
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000xxxx        xxxx0000011101
 *      shift ------
 *               ac --
 */
std::string NMD::SHILO(uint64 instruction)
{
    int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string shift = IMMEDIATE(copy(shift_value));
    std::string ac = AC(copy(ac_value));

    return img::format("SHILO %s, %s", ac, shift);
}


/*
 * SHILOV ac, rs - Variable Shift of Accumulator Value Leaving the Result in
 *                   the Same Accumulator
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000xxxxx       01001001111111
 *          rs -----
 *               ac --
 */
std::string NMD::SHILOV(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ac_value = extract_ac_13_12(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string ac = AC(copy(ac_value));

    return img::format("SHILOV %s, %s", ac, rs);
}


/*
 * SHLL.PH rt, rs, sa - Shift Left Logical Vector Pair Halfwords
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000              001110110101
 *     rt -----
 *          rs -----
 *               sa ----
 */
std::string NMD::SHLL_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHLL.PH %s, %s, %s", rt, rs, sa);
}


/*
 * SHLL.QB rt, rs, sa - Shift Left Logical Vector Quad Bytes
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000             0100001111111
 *     rt -----
 *          rs -----
 *               sa ---
 */
std::string NMD::SHLL_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHLL.QB %s, %s, %s", rt, rs, sa);
}


/*
 * SHLL_S.PH rt, rs, sa - Shift Left Logical Vector Pair Halfwords (saturated)
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000              001110110101
 *     rt -----
 *          rs -----
 *               sa ----
 */
std::string NMD::SHLL_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHLL_S.PH %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHLL_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHLL_S.W %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHLLV_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHLLV.PH %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHLLV_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHLLV.QB %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHLLV_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHLLV_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRA_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRA.PH %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRA_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRA.QB %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRA_R_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRA_R.PH %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRA_R_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRA_R.QB %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRA_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12_11(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRA_R.W %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRAV_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRAV.PH %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRAV_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRAV.QB %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRAV_R_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRAV_R_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRAV_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRL_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRL.PH %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRL_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 sa_value = extract_sa_15_14_13(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string sa = IMMEDIATE(copy(sa_value));

    return img::format("SHRL.QB %s, %s, %s", rt, rs, sa);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRLV_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRLV.PH %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHRLV_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SHRLV.QB %s, %s, %s", rd, rt, rs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SHX %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SHXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SHXS %s, %s(%s)", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SIGRIE(uint64 instruction)
{
    uint64 code_value = extract_code_18_to_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("SIGRIE %s", code);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLL_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 shift3_value = extract_shift3_2_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));

    return img::format("SLL %s, %s, %s", rt3, rs3, shift3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLL_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("SLL %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLLV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SLLV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLT(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SLT %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLTI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SLTI %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLTIU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SLTIU %s, %s, %s", rt, rs, u);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SLTU(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SLTU %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SOV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SOV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SPECIAL2(uint64 instruction)
{
    uint64 op_value = extract_op_25_to_3(instruction);

    std::string op = IMMEDIATE(copy(op_value));

    return img::format("SPECIAL2 %s", op);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SQRT_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("SQRT.D %s, %s", ft, fs);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SQRT_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("SQRT.S %s, %s", ft, fs);
}


/*
 * SRA rd, rt, sa - Shift Word Right Arithmetic
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  00000000000               000011
 *          rt -----
 *               rd -----
 *                    sa -----
 */
std::string NMD::SRA(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("SRA %s, %s, %s", rt, rs, shift);
}


/*
 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00000000111
 *     rs -----
 *          rt -----
 *               rd -----
 */
std::string NMD::SRAV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SRAV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00000000111
 *     rs -----
 *          rt -----
 *               rd -----
 */
std::string NMD::SRL_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 shift3_value = extract_shift3_2_1_0(instruction);

    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));

    return img::format("SRL %s, %s, %s", rt3, rs3, shift3);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SRL_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 shift_value = extract_shift_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string shift = IMMEDIATE(copy(shift_value));

    return img::format("SRL %s, %s, %s", rt, rs, shift);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SRLV(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SRLV %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUB %s, %s, %s", rd, rs, rt);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUB_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SUB.D %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUB_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
    uint64 fd_value = extract_fd_15_14_13_12_11(instruction);

    std::string fd = FPR(copy(fd_value));
    std::string fs = FPR(copy(fs_value));
    std::string ft = FPR(copy(ft_value));

    return img::format("SUB.S %s, %s, %s", fd, fs, ft);
}


/*
 *
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQ_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQ.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQ_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQ_S_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQH_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQH.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
 *                         to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQH_R_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH_R.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
 *                           to Halve Results (rounding)
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               11001001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQH_R_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
}


/*
 * SUBQH.W rd, rs, rt - Subtract Fractional Words And Shift Right to Halve
 *                        Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBQH_W(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBQH.W %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 rd3_value = extract_rd3_3_2_1(instruction);

    std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));

    return img::format("SUBU %s, %s, %s", rd3, rs3, rt3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBU %s, %s, %s", rd, rs, rt);
}


/*
 * SUBU.PH rd, rs, rt - Subtract Unsigned Integer Halfwords
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01100001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBU.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBU.QB rd, rs, rt - Subtract Unsigned Quad Byte Vector
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01011001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBU.QB %s, %s, %s", rd, rs, rt);
}


/*
 * SUBU_S.PH rd, rs, rt - Subtract Unsigned Integer Halfwords (saturating)
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               11100001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_S_PH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
}


/*
 * SUBU_S.QB rd, rs, rt - Subtract Unsigned Quad Byte Vector (saturating)
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               11011001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBU_S_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
}


/*
 * SUBUH.QB rd, rs, rt - Subtract Unsigned Bytes And Right Shift to Halve
 *                         Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               01101001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBUH_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBUH.QB %s, %s, %s", rd, rs, rt);
}


/*
 * SUBUH_R.QB rd, rs, rt - Subtract Unsigned Bytes And Right Shift to Halve
 *                           Results (rounding)
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               11101001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SUBUH_R_QB(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_16_(uint64 instruction)
{
    uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);
    uint64 u_value = extract_u_3_2_1_0__s2(instruction);

    std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));

    return img::format("SW %s, %s(%s)", rtz3, u, rs3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_4X4_(uint64 instruction)
{
    uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
    uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
    uint64 u_value = extract_u_3_8__s2(instruction);

    std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));

    return img::format("SW %s, %s(%s)", rtz4, u, rs4);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_GP16_(uint64 instruction)
{
    uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
    uint64 rtz3_value = extract_rtz3_9_8_7(instruction);

    std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SW %s, %s($%d)", rtz3, u, 28);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_GP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_20_to_2__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SW %s, %s($%d)", rt, u, 28);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_S9_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SW %s, %s(%s)", rt, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_SP_(uint64 instruction)
{
    uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
    uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SW %s, %s($%d)", rt, u, 29);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SW_U12_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SW %s, %s(%s)", rt, u, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC1_GP_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 u_value = extract_u_17_to_2__s2(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("SWC1 %s, %s($%d)", ft, u, 28);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC1_S9_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SWC1 %s, %s(%s)", ft, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC1_U12_(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string u = IMMEDIATE(copy(u_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SWC1 %s, %s(%s)", ft, u, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC1X(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SWC1X %s, %s(%s)", ft, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC1XS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 ft_value = extract_ft_15_14_13_12_11(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SWC1XS %s, %s(%s)", ft, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWC2(uint64 instruction)
{
    uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string cs = CPR(copy(cs_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SWC2 %s, %s(%s)", cs, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SWE %s, %s(%s)", rt, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("SWM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWPC_48_(uint64 instruction)
{
    uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
    int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = ADDRESS(encode_s_from_address(s_value), 6);

    return img::format("SWPC %s, %s", rt, s);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWX(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SWX %s, %s(%s)", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SWXS(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("SWXS %s, %s(%s)", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SYNC(uint64 instruction)
{
    uint64 stype_value = extract_stype_20_19_18_17_16(instruction);

    std::string stype = IMMEDIATE(copy(stype_value));

    return img::format("SYNC %s", stype);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SYNCI(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SYNCI %s(%s)", s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SYNCIE(uint64 instruction)
{
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("SYNCIE %s(%s)", s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::SYSCALL_16_(uint64 instruction)
{
    uint64 code_value = extract_code_1_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("SYSCALL %s", code);
}


/*
 * SYSCALL code - System Call. Cause a System Call Exception
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  00000000000010
 *           code ------------------
 */
std::string NMD::SYSCALL_32_(uint64 instruction)
{
    uint64 code_value = extract_code_17_to_0(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("SYSCALL %s", code);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TEQ(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("TEQ %s, %s", rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGINV(uint64 instruction)
{
    (void)instruction;

    return "TLBGINV ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGINVF(uint64 instruction)
{
    (void)instruction;

    return "TLBGINVF ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGP(uint64 instruction)
{
    (void)instruction;

    return "TLBGP ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGR(uint64 instruction)
{
    (void)instruction;

    return "TLBGR ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGWI(uint64 instruction)
{
    (void)instruction;

    return "TLBGWI ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBGWR(uint64 instruction)
{
    (void)instruction;

    return "TLBGWR ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBINV(uint64 instruction)
{
    (void)instruction;

    return "TLBINV ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBINVF(uint64 instruction)
{
    (void)instruction;

    return "TLBINVF ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBP(uint64 instruction)
{
    (void)instruction;

    return "TLBP ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBR(uint64 instruction)
{
    (void)instruction;

    return "TLBR ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBWI(uint64 instruction)
{
    (void)instruction;

    return "TLBWI ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TLBWR(uint64 instruction)
{
    (void)instruction;

    return "TLBWR ";
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TNE(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("TNE %s, %s", rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TRUNC_L_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("TRUNC.L.D %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TRUNC_L_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("TRUNC.L.S %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TRUNC_W_D(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("TRUNC.W.D %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::TRUNC_W_S(uint64 instruction)
{
    uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
    uint64 fs_value = extract_fs_20_19_18_17_16(instruction);

    std::string ft = FPR(copy(ft_value));
    std::string fs = FPR(copy(fs_value));

    return img::format("TRUNC.W.S %s, %s", ft, fs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UALDM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("UALDM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UALH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("UALH %s, %s(%s)", rt, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UALWM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("UALWM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UASDM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("UASDM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UASH(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("UASH %s, %s(%s)", rt, s, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UASWM(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
    uint64 count3_value = extract_count3_14_13_12(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string s = IMMEDIATE(copy(s_value));
    std::string rs = GPR(copy(rs_value));
    std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));

    return img::format("UASWM %s, %s(%s), %s", rt, s, rs, count3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::UDI(uint64 instruction)
{
    uint64 op_value = extract_op_25_to_3(instruction);

    std::string op = IMMEDIATE(copy(op_value));

    return img::format("UDI %s", op);
}


/*
 * WAIT code - Enter Wait State
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000          1100001101111111
 *   code ----------
 */
std::string NMD::WAIT(uint64 instruction)
{
    uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);

    std::string code = IMMEDIATE(copy(code_value));

    return img::format("WAIT %s", code);
}


/*
 * WRDSP rt, mask - Write Fields to DSPControl Register from a GPR
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000            01011001111111
 *     rt -----
 *        mask -------
 */
std::string NMD::WRDSP(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string mask = IMMEDIATE(copy(mask_value));

    return img::format("WRDSP %s, %s", rt, mask);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::WRPGPR(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("WRPGPR %s, %s", rt, rs);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::XOR_16_(uint64 instruction)
{
    uint64 rt3_value = extract_rt3_9_8_7(instruction);
    uint64 rs3_value = extract_rs3_6_5_4(instruction);

    std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
    std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));

    return img::format("XOR %s, %s", rs3, rt3);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::XOR_32_(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 rd_value = extract_rd_15_14_13_12_11(instruction);

    std::string rd = GPR(copy(rd_value));
    std::string rs = GPR(copy(rs_value));
    std::string rt = GPR(copy(rt_value));

    return img::format("XOR %s, %s, %s", rd, rs, rt);
}


/*
 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 *               rd -----
 */
std::string NMD::XORI(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
    uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));
    std::string u = IMMEDIATE(copy(u_value));

    return img::format("XORI %s, %s, %s", rt, rs, u);
}


/*
 * YIELD rt, rs -
 *
 *   3         2         1
 *  10987654321098765432109876543210
 *  001000               00010001101
 *     rt -----
 *          rs -----
 */
std::string NMD::YIELD(uint64 instruction)
{
    uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
    uint64 rs_value = extract_rs_20_19_18_17_16(instruction);

    std::string rt = GPR(copy(rt_value));
    std::string rs = GPR(copy(rs_value));

    return img::format("YIELD %s, %s", rt, rs);
}



NMD::Pool NMD::P_SYSCALL[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfffc0000, 0x00080000, &NMD::SYSCALL_32_      , 0,
       0x0                 },        /* SYSCALL[32] */
    { instruction         , 0                   , 0   , 32,
       0xfffc0000, 0x000c0000, &NMD::HYPCALL          , 0,
       CP0_ | VZ_          },        /* HYPCALL */
};


NMD::Pool NMD::P_RI[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfff80000, 0x00000000, &NMD::SIGRIE           , 0,
       0x0                 },        /* SIGRIE */
    { pool                , P_SYSCALL           , 2   , 32,
       0xfff80000, 0x00080000, 0                      , 0,
       0x0                 },        /* P.SYSCALL */
    { instruction         , 0                   , 0   , 32,
       0xfff80000, 0x00100000, &NMD::BREAK_32_        , 0,
       0x0                 },        /* BREAK[32] */
    { instruction         , 0                   , 0   , 32,
       0xfff80000, 0x00180000, &NMD::SDBBP_32_        , 0,
       EJTAG_              },        /* SDBBP[32] */
};


NMD::Pool NMD::P_ADDIU[2] = {
    { pool                , P_RI                , 4   , 32,
       0xffe00000, 0x00000000, 0                      , 0,
       0x0                 },        /* P.RI */
    { instruction         , 0                   , 0   , 32,
       0xfc000000, 0x00000000, &NMD::ADDIU_32_        , &NMD::ADDIU_32__cond   ,
       0x0                 },        /* ADDIU[32] */
};


NMD::Pool NMD::P_TRAP[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000000, &NMD::TEQ              , 0,
       XMMS_               },        /* TEQ */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000400, &NMD::TNE              , 0,
       XMMS_               },        /* TNE */
};


NMD::Pool NMD::P_CMOVE[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000210, &NMD::MOVZ             , 0,
       0x0                 },        /* MOVZ */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000610, &NMD::MOVN             , 0,
       0x0                 },        /* MOVN */
};


NMD::Pool NMD::P_D_MT_VPE[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1f3fff, 0x20010ab0, &NMD::DMT              , 0,
       MT_                 },        /* DMT */
    { instruction         , 0                   , 0   , 32,
       0xfc1f3fff, 0x20000ab0, &NMD::DVPE             , 0,
       MT_                 },        /* DVPE */
};


NMD::Pool NMD::P_E_MT_VPE[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1f3fff, 0x20010eb0, &NMD::EMT              , 0,
       MT_                 },        /* EMT */
    { instruction         , 0                   , 0   , 32,
       0xfc1f3fff, 0x20000eb0, &NMD::EVPE             , 0,
       MT_                 },        /* EVPE */
};


NMD::Pool NMD::_P_MT_VPE[2] = {
    { pool                , P_D_MT_VPE          , 2   , 32,
       0xfc003fff, 0x20000ab0, 0                      , 0,
       0x0                 },        /* P.D_MT_VPE */
    { pool                , P_E_MT_VPE          , 2   , 32,
       0xfc003fff, 0x20000eb0, 0                      , 0,
       0x0                 },        /* P.E_MT_VPE */
};


NMD::Pool NMD::P_MT_VPE[8] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x200002b0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(0) */
    { pool                , _P_MT_VPE           , 2   , 32,
       0xfc003bff, 0x20000ab0, 0                      , 0,
       0x0                 },        /* _P.MT_VPE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x200012b0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x20001ab0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x200022b0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x20002ab0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x200032b0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003bff, 0x20003ab0, 0                      , 0,
       0x0                 },        /* P.MT_VPE~*(7) */
};


NMD::Pool NMD::P_DVP[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20000390, &NMD::DVP              , 0,
       0x0                 },        /* DVP */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20000790, &NMD::EVP              , 0,
       0x0                 },        /* EVP */
};


NMD::Pool NMD::P_SLTU[2] = {
    { pool                , P_DVP               , 2   , 32,
       0xfc00fbff, 0x20000390, 0                      , 0,
       0x0                 },        /* P.DVP */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000390, &NMD::SLTU             , &NMD::SLTU_cond        ,
       0x0                 },        /* SLTU */
};


NMD::Pool NMD::_POOL32A0[128] = {
    { pool                , P_TRAP              , 2   , 32,
       0xfc0003ff, 0x20000000, 0                      , 0,
       0x0                 },        /* P.TRAP */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000008, &NMD::SEB              , 0,
       XMMS_               },        /* SEB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000010, &NMD::SLLV             , 0,
       0x0                 },        /* SLLV */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000018, &NMD::MUL_32_          , 0,
       0x0                 },        /* MUL[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000020, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000028, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(5) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000030, &NMD::MFC0             , 0,
       0x0                 },        /* MFC0 */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000038, &NMD::MFHC0            , 0,
       CP0_ | MVH_         },        /* MFHC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000040, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(8) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000048, &NMD::SEH              , 0,
       0x0                 },        /* SEH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000050, &NMD::SRLV             , 0,
       0x0                 },        /* SRLV */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000058, &NMD::MUH              , 0,
       0x0                 },        /* MUH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000060, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000068, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(13) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000070, &NMD::MTC0             , 0,
       CP0_                },        /* MTC0 */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000078, &NMD::MTHC0            , 0,
       CP0_ | MVH_         },        /* MTHC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000080, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000088, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(17) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000090, &NMD::SRAV             , 0,
       0x0                 },        /* SRAV */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000098, &NMD::MULU             , 0,
       0x0                 },        /* MULU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000a0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000a8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(21) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000b0, &NMD::MFGC0            , 0,
       CP0_ | VZ_          },        /* MFGC0 */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000b8, &NMD::MFHGC0           , 0,
       CP0_ | VZ_ | MVH_   },        /* MFHGC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000c0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000c8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(25) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000d0, &NMD::ROTRV            , 0,
       0x0                 },        /* ROTRV */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000d8, &NMD::MUHU             , 0,
       0x0                 },        /* MUHU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000e0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000e8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(29) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000f0, &NMD::MTGC0            , 0,
       CP0_ | VZ_          },        /* MTGC0 */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000f8, &NMD::MTHGC0           , 0,
       CP0_ | VZ_ | MVH_   },        /* MTHGC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000100, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(32) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000108, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(33) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000110, &NMD::ADD              , 0,
       XMMS_               },        /* ADD */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000118, &NMD::DIV              , 0,
       0x0                 },        /* DIV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000120, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(36) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000128, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(37) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000130, &NMD::DMFC0            , 0,
       CP0_ | MIPS64_      },        /* DMFC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000138, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(39) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000140, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(40) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000148, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(41) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000150, &NMD::ADDU_32_         , 0,
       0x0                 },        /* ADDU[32] */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000158, &NMD::MOD              , 0,
       0x0                 },        /* MOD */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000160, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(44) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000168, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(45) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000170, &NMD::DMTC0            , 0,
       CP0_ | MIPS64_      },        /* DMTC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000178, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(47) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000180, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(48) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000188, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(49) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000190, &NMD::SUB              , 0,
       XMMS_               },        /* SUB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000198, &NMD::DIVU             , 0,
       0x0                 },        /* DIVU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001a0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001a8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(53) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001b0, &NMD::DMFGC0           , 0,
       CP0_ | MIPS64_ | VZ_},        /* DMFGC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001b8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(55) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001c0, &NMD::RDHWR            , 0,
       XMMS_               },        /* RDHWR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001c8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(57) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001d0, &NMD::SUBU_32_         , 0,
       0x0                 },        /* SUBU[32] */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001d8, &NMD::MODU             , 0,
       0x0                 },        /* MODU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001e0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001e8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(61) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001f0, &NMD::DMTGC0           , 0,
       CP0_ | MIPS64_ | VZ_},        /* DMTGC0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001f8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(63) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000200, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(64) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000208, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(65) */
    { pool                , P_CMOVE             , 2   , 32,
       0xfc0003ff, 0x20000210, 0                      , 0,
       0x0                 },        /* P.CMOVE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000218, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(67) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000220, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(68) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000228, &NMD::FORK             , 0,
       MT_                 },        /* FORK */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000230, &NMD::MFTR             , 0,
       MT_                 },        /* MFTR */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000238, &NMD::MFHTR            , 0,
       MT_                 },        /* MFHTR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000240, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(72) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000248, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(73) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000250, &NMD::AND_32_          , 0,
       0x0                 },        /* AND[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000258, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(75) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000260, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(76) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000268, &NMD::YIELD            , 0,
       MT_                 },        /* YIELD */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000270, &NMD::MTTR             , 0,
       MT_                 },        /* MTTR */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000278, &NMD::MTHTR            , 0,
       MT_                 },        /* MTHTR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000280, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(80) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000288, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(81) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000290, &NMD::OR_32_           , 0,
       0x0                 },        /* OR[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000298, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(83) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002a0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(84) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002a8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(85) */
    { pool                , P_MT_VPE            , 8   , 32,
       0xfc0003ff, 0x200002b0, 0                      , 0,
       0x0                 },        /* P.MT_VPE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002b8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(87) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002c0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(88) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002c8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(89) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200002d0, &NMD::NOR              , 0,
       0x0                 },        /* NOR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002d8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(91) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002e0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(92) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002e8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(93) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002f0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(94) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002f8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(95) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000300, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(96) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000308, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(97) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000310, &NMD::XOR_32_          , 0,
       0x0                 },        /* XOR[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000318, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(99) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000320, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(100) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000328, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(101) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000330, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(102) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000338, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(103) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000340, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(104) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000348, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(105) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000350, &NMD::SLT              , 0,
       0x0                 },        /* SLT */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000358, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(107) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000360, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(108) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000368, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(109) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000370, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(110) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000378, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(111) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000380, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(112) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000388, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(113) */
    { pool                , P_SLTU              , 2   , 32,
       0xfc0003ff, 0x20000390, 0                      , 0,
       0x0                 },        /* P.SLTU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000398, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(115) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003a0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(116) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003a8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(117) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003b0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(118) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003b8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(119) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003c0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(120) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003c8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(121) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200003d0, &NMD::SOV              , 0,
       0x0                 },        /* SOV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003d8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(123) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003e0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(124) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003e8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(125) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003f0, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(126) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003f8, 0                      , 0,
       0x0                 },        /* _POOL32A0~*(127) */
};


NMD::Pool NMD::ADDQ__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000000d, &NMD::ADDQ_PH          , 0,
       DSP_                },        /* ADDQ.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000040d, &NMD::ADDQ_S_PH        , 0,
       DSP_                },        /* ADDQ_S.PH */
};


NMD::Pool NMD::MUL__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000002d, &NMD::MUL_PH           , 0,
       DSP_                },        /* MUL.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000042d, &NMD::MUL_S_PH         , 0,
       DSP_                },        /* MUL_S.PH */
};


NMD::Pool NMD::ADDQH__R__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000004d, &NMD::ADDQH_PH         , 0,
       DSP_                },        /* ADDQH.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000044d, &NMD::ADDQH_R_PH       , 0,
       DSP_                },        /* ADDQH_R.PH */
};


NMD::Pool NMD::ADDQH__R__W[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000008d, &NMD::ADDQH_W          , 0,
       DSP_                },        /* ADDQH.W */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000048d, &NMD::ADDQH_R_W        , 0,
       DSP_                },        /* ADDQH_R.W */
};


NMD::Pool NMD::ADDU__S__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200000cd, &NMD::ADDU_QB          , 0,
       DSP_                },        /* ADDU.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200004cd, &NMD::ADDU_S_QB        , 0,
       DSP_                },        /* ADDU_S.QB */
};


NMD::Pool NMD::ADDU__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000010d, &NMD::ADDU_PH          , 0,
       DSP_                },        /* ADDU.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000050d, &NMD::ADDU_S_PH        , 0,
       DSP_                },        /* ADDU_S.PH */
};


NMD::Pool NMD::ADDUH__R__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000014d, &NMD::ADDUH_QB         , 0,
       DSP_                },        /* ADDUH.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000054d, &NMD::ADDUH_R_QB       , 0,
       DSP_                },        /* ADDUH_R.QB */
};


NMD::Pool NMD::SHRAV__R__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000018d, &NMD::SHRAV_PH         , 0,
       DSP_                },        /* SHRAV.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000058d, &NMD::SHRAV_R_PH       , 0,
       DSP_                },        /* SHRAV_R.PH */
};


NMD::Pool NMD::SHRAV__R__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200001cd, &NMD::SHRAV_QB         , 0,
       DSP_                },        /* SHRAV.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200005cd, &NMD::SHRAV_R_QB       , 0,
       DSP_                },        /* SHRAV_R.QB */
};


NMD::Pool NMD::SUBQ__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000020d, &NMD::SUBQ_PH          , 0,
       DSP_                },        /* SUBQ.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000060d, &NMD::SUBQ_S_PH        , 0,
       DSP_                },        /* SUBQ_S.PH */
};


NMD::Pool NMD::SUBQH__R__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000024d, &NMD::SUBQH_PH         , 0,
       DSP_                },        /* SUBQH.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000064d, &NMD::SUBQH_R_PH       , 0,
       DSP_                },        /* SUBQH_R.PH */
};


NMD::Pool NMD::SUBQH__R__W[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000028d, &NMD::SUBQH_W          , 0,
       DSP_                },        /* SUBQH.W */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000068d, &NMD::SUBQH_R_W        , 0,
       DSP_                },        /* SUBQH_R.W */
};


NMD::Pool NMD::SUBU__S__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200002cd, &NMD::SUBU_QB          , 0,
       DSP_                },        /* SUBU.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200006cd, &NMD::SUBU_S_QB        , 0,
       DSP_                },        /* SUBU_S.QB */
};


NMD::Pool NMD::SUBU__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000030d, &NMD::SUBU_PH          , 0,
       DSP_                },        /* SUBU.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000070d, &NMD::SUBU_S_PH        , 0,
       DSP_                },        /* SUBU_S.PH */
};


NMD::Pool NMD::SHRA__R__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000335, &NMD::SHRA_PH          , 0,
       DSP_                },        /* SHRA.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000735, &NMD::SHRA_R_PH        , 0,
       DSP_                },        /* SHRA_R.PH */
};


NMD::Pool NMD::SUBUH__R__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000034d, &NMD::SUBUH_QB         , 0,
       DSP_                },        /* SUBUH.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000074d, &NMD::SUBUH_R_QB       , 0,
       DSP_                },        /* SUBUH_R.QB */
};


NMD::Pool NMD::SHLLV__S__PH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000038d, &NMD::SHLLV_PH         , 0,
       DSP_                },        /* SHLLV.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x2000078d, &NMD::SHLLV_S_PH       , 0,
       DSP_                },        /* SHLLV_S.PH */
};


NMD::Pool NMD::SHLL__S__PH[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000fff, 0x200003b5, &NMD::SHLL_PH          , 0,
       DSP_                },        /* SHLL.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x200007b5, 0                      , 0,
       0x0                 },        /* SHLL[_S].PH~*(1) */
    { instruction         , 0                   , 0   , 32,
       0xfc000fff, 0x20000bb5, &NMD::SHLL_S_PH        , 0,
       DSP_                },        /* SHLL_S.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x20000fb5, 0                      , 0,
       0x0                 },        /* SHLL[_S].PH~*(3) */
};


NMD::Pool NMD::PRECR_SRA__R__PH_W[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200003cd, &NMD::PRECR_SRA_PH_W   , 0,
       DSP_                },        /* PRECR_SRA.PH.W */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200007cd, &NMD::PRECR_SRA_R_PH_W , 0,
       DSP_                },        /* PRECR_SRA_R.PH.W */
};


NMD::Pool NMD::_POOL32A5[128] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000005, &NMD::CMP_EQ_PH        , 0,
       DSP_                },        /* CMP.EQ.PH */
    { pool                , ADDQ__S__PH         , 2   , 32,
       0xfc0003ff, 0x2000000d, 0                      , 0,
       0x0                 },        /* ADDQ[_S].PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000015, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(2) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000001d, &NMD::SHILO            , 0,
       DSP_                },        /* SHILO */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000025, &NMD::MULEQ_S_W_PHL    , 0,
       DSP_                },        /* MULEQ_S.W.PHL */
    { pool                , MUL__S__PH          , 2   , 32,
       0xfc0003ff, 0x2000002d, 0                      , 0,
       0x0                 },        /* MUL[_S].PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000035, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(6) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000003d, &NMD::REPL_PH          , 0,
       DSP_                },        /* REPL.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000045, &NMD::CMP_LT_PH        , 0,
       DSP_                },        /* CMP.LT.PH */
    { pool                , ADDQH__R__PH        , 2   , 32,
       0xfc0003ff, 0x2000004d, 0                      , 0,
       0x0                 },        /* ADDQH[_R].PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000055, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000005d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(11) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000065, &NMD::MULEQ_S_W_PHR    , 0,
       DSP_                },        /* MULEQ_S.W.PHR */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000006d, &NMD::PRECR_QB_PH      , 0,
       DSP_                },        /* PRECR.QB.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000075, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000007d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(15) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000085, &NMD::CMP_LE_PH        , 0,
       DSP_                },        /* CMP.LE.PH */
    { pool                , ADDQH__R__W         , 2   , 32,
       0xfc0003ff, 0x2000008d, 0                      , 0,
       0x0                 },        /* ADDQH[_R].W */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000095, &NMD::MULEU_S_PH_QBL   , 0,
       DSP_                },        /* MULEU_S.PH.QBL */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000009d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000a5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(20) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000ad, &NMD::PRECRQ_QB_PH     , 0,
       DSP_                },        /* PRECRQ.QB.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000b5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000bd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(23) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000c5, &NMD::CMPGU_EQ_QB      , 0,
       DSP_                },        /* CMPGU.EQ.QB */
    { pool                , ADDU__S__QB         , 2   , 32,
       0xfc0003ff, 0x200000cd, 0                      , 0,
       0x0                 },        /* ADDU[_S].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000d5, &NMD::MULEU_S_PH_QBR   , 0,
       DSP_                },        /* MULEU_S.PH.QBR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000dd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000e5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(28) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200000ed, &NMD::PRECRQ_PH_W      , 0,
       DSP_                },        /* PRECRQ.PH.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000f5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200000fd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(31) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000105, &NMD::CMPGU_LT_QB      , 0,
       DSP_                },        /* CMPGU.LT.QB */
    { pool                , ADDU__S__PH         , 2   , 32,
       0xfc0003ff, 0x2000010d, 0                      , 0,
       0x0                 },        /* ADDU[_S].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000115, &NMD::MULQ_RS_PH       , 0,
       DSP_                },        /* MULQ_RS.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000011d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(35) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000125, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(36) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000012d, &NMD::PRECRQ_RS_PH_W   , 0,
       DSP_                },        /* PRECRQ_RS.PH.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000135, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(38) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000013d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(39) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000145, &NMD::CMPGU_LE_QB      , 0,
       DSP_                },        /* CMPGU.LE.QB */
    { pool                , ADDUH__R__QB        , 2   , 32,
       0xfc0003ff, 0x2000014d, 0                      , 0,
       0x0                 },        /* ADDUH[_R].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000155, &NMD::MULQ_S_PH        , 0,
       DSP_                },        /* MULQ_S.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000015d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(43) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000165, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(44) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000016d, &NMD::PRECRQU_S_QB_PH  , 0,
       DSP_                },        /* PRECRQU_S.QB.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000175, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(46) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000017d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(47) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000185, &NMD::CMPGDU_EQ_QB     , 0,
       DSP_                },        /* CMPGDU.EQ.QB */
    { pool                , SHRAV__R__PH        , 2   , 32,
       0xfc0003ff, 0x2000018d, 0                      , 0,
       0x0                 },        /* SHRAV[_R].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000195, &NMD::MULQ_RS_W        , 0,
       DSP_                },        /* MULQ_RS.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000019d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(51) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001a5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(52) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001ad, &NMD::PACKRL_PH        , 0,
       DSP_                },        /* PACKRL.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001b5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(54) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001bd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(55) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001c5, &NMD::CMPGDU_LT_QB     , 0,
       DSP_                },        /* CMPGDU.LT.QB */
    { pool                , SHRAV__R__QB        , 2   , 32,
       0xfc0003ff, 0x200001cd, 0                      , 0,
       0x0                 },        /* SHRAV[_R].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001d5, &NMD::MULQ_S_W         , 0,
       DSP_                },        /* MULQ_S.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001dd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(59) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001e5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(60) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200001ed, &NMD::PICK_QB          , 0,
       DSP_                },        /* PICK.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001f5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(62) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200001fd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(63) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000205, &NMD::CMPGDU_LE_QB     , 0,
       DSP_                },        /* CMPGDU.LE.QB */
    { pool                , SUBQ__S__PH         , 2   , 32,
       0xfc0003ff, 0x2000020d, 0                      , 0,
       0x0                 },        /* SUBQ[_S].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000215, &NMD::APPEND           , 0,
       DSP_                },        /* APPEND */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000021d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(67) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000225, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(68) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x2000022d, &NMD::PICK_PH          , 0,
       DSP_                },        /* PICK.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000235, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(70) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000023d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(71) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000245, &NMD::CMPU_EQ_QB       , 0,
       DSP_                },        /* CMPU.EQ.QB */
    { pool                , SUBQH__R__PH        , 2   , 32,
       0xfc0003ff, 0x2000024d, 0                      , 0,
       0x0                 },        /* SUBQH[_R].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000255, &NMD::PREPEND          , 0,
       DSP_                },        /* PREPEND */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000025d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(75) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000265, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(76) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000026d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(77) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000275, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(78) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000027d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(79) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000285, &NMD::CMPU_LT_QB       , 0,
       DSP_                },        /* CMPU.LT.QB */
    { pool                , SUBQH__R__W         , 2   , 32,
       0xfc0003ff, 0x2000028d, 0                      , 0,
       0x0                 },        /* SUBQH[_R].W */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000295, &NMD::MODSUB           , 0,
       DSP_                },        /* MODSUB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000029d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(83) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002a5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(84) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002ad, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(85) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002b5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(86) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002bd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(87) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200002c5, &NMD::CMPU_LE_QB       , 0,
       DSP_                },        /* CMPU.LE.QB */
    { pool                , SUBU__S__QB         , 2   , 32,
       0xfc0003ff, 0x200002cd, 0                      , 0,
       0x0                 },        /* SUBU[_S].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200002d5, &NMD::SHRAV_R_W        , 0,
       DSP_                },        /* SHRAV_R.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002dd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(91) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002e5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(92) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002ed, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(93) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200002f5, &NMD::SHRA_R_W         , 0,
       DSP_                },        /* SHRA_R.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200002fd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(95) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000305, &NMD::ADDQ_S_W         , 0,
       DSP_                },        /* ADDQ_S.W */
    { pool                , SUBU__S__PH         , 2   , 32,
       0xfc0003ff, 0x2000030d, 0                      , 0,
       0x0                 },        /* SUBU[_S].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000315, &NMD::SHRLV_PH         , 0,
       DSP_                },        /* SHRLV.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000031d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(99) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000325, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(100) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000032d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(101) */
    { pool                , SHRA__R__PH         , 2   , 32,
       0xfc0003ff, 0x20000335, 0                      , 0,
       0x0                 },        /* SHRA[_R].PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000033d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(103) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000345, &NMD::SUBQ_S_W         , 0,
       DSP_                },        /* SUBQ_S.W */
    { pool                , SUBUH__R__QB        , 2   , 32,
       0xfc0003ff, 0x2000034d, 0                      , 0,
       0x0                 },        /* SUBUH[_R].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000355, &NMD::SHRLV_QB         , 0,
       DSP_                },        /* SHRLV.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000035d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(107) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000365, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(108) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000036d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(109) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x20000375, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(110) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000037d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(111) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000385, &NMD::ADDSC            , 0,
       DSP_                },        /* ADDSC */
    { pool                , SHLLV__S__PH        , 2   , 32,
       0xfc0003ff, 0x2000038d, 0                      , 0,
       0x0                 },        /* SHLLV[_S].PH */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x20000395, &NMD::SHLLV_QB         , 0,
       DSP_                },        /* SHLLV.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x2000039d, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(115) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003a5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(116) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003ad, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(117) */
    { pool                , SHLL__S__PH         , 4   , 32,
       0xfc0003ff, 0x200003b5, 0                      , 0,
       0x0                 },        /* SHLL[_S].PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003bd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(119) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200003c5, &NMD::ADDWC            , 0,
       DSP_                },        /* ADDWC */
    { pool                , PRECR_SRA__R__PH_W  , 2   , 32,
       0xfc0003ff, 0x200003cd, 0                      , 0,
       0x0                 },        /* PRECR_SRA[_R].PH.W */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200003d5, &NMD::SHLLV_S_W        , 0,
       DSP_                },        /* SHLLV_S.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003dd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(123) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003e5, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(124) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003ed, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(125) */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0x200003f5, &NMD::SHLL_S_W         , 0,
       DSP_                },        /* SHLL_S.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0x200003fd, 0                      , 0,
       0x0                 },        /* _POOL32A5~*(127) */
};


NMD::Pool NMD::PP_LSX[16] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000007, &NMD::LBX              , 0,
       0x0                 },        /* LBX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000087, &NMD::SBX              , 0,
       XMMS_               },        /* SBX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000107, &NMD::LBUX             , 0,
       0x0                 },        /* LBUX */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0x20000187, 0                      , 0,
       0x0                 },        /* PP.LSX~*(3) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000207, &NMD::LHX              , 0,
       0x0                 },        /* LHX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000287, &NMD::SHX              , 0,
       XMMS_               },        /* SHX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000307, &NMD::LHUX             , 0,
       0x0                 },        /* LHUX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000387, &NMD::LWUX             , 0,
       MIPS64_             },        /* LWUX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000407, &NMD::LWX              , 0,
       0x0                 },        /* LWX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000487, &NMD::SWX              , 0,
       XMMS_               },        /* SWX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000507, &NMD::LWC1X            , 0,
       CP1_                },        /* LWC1X */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000587, &NMD::SWC1X            , 0,
       CP1_                },        /* SWC1X */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000607, &NMD::LDX              , 0,
       MIPS64_             },        /* LDX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000687, &NMD::SDX              , 0,
       MIPS64_             },        /* SDX */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000707, &NMD::LDC1X            , 0,
       CP1_                },        /* LDC1X */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000787, &NMD::SDC1X            , 0,
       CP1_                },        /* SDC1X */
};


NMD::Pool NMD::PP_LSXS[16] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0x20000047, 0                      , 0,
       0x0                 },        /* PP.LSXS~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0x200000c7, 0                      , 0,
       0x0                 },        /* PP.LSXS~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0x20000147, 0                      , 0,
       0x0                 },        /* PP.LSXS~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0x200001c7, 0                      , 0,
       0x0                 },        /* PP.LSXS~*(3) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000247, &NMD::LHXS             , 0,
       0x0                 },        /* LHXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200002c7, &NMD::SHXS             , 0,
       XMMS_               },        /* SHXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000347, &NMD::LHUXS            , 0,
       0x0                 },        /* LHUXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200003c7, &NMD::LWUXS            , 0,
       MIPS64_             },        /* LWUXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000447, &NMD::LWXS_32_         , 0,
       0x0                 },        /* LWXS[32] */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200004c7, &NMD::SWXS             , 0,
       XMMS_               },        /* SWXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000547, &NMD::LWC1XS           , 0,
       CP1_                },        /* LWC1XS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200005c7, &NMD::SWC1XS           , 0,
       CP1_                },        /* SWC1XS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000647, &NMD::LDXS             , 0,
       MIPS64_             },        /* LDXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200006c7, &NMD::SDXS             , 0,
       MIPS64_             },        /* SDXS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x20000747, &NMD::LDC1XS           , 0,
       CP1_                },        /* LDC1XS */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0x200007c7, &NMD::SDC1XS           , 0,
       CP1_                },        /* SDC1XS */
};


NMD::Pool NMD::P_LSX[2] = {
    { pool                , PP_LSX              , 16  , 32,
       0xfc00007f, 0x20000007, 0                      , 0,
       0x0                 },        /* PP.LSX */
    { pool                , PP_LSXS             , 16  , 32,
       0xfc00007f, 0x20000047, 0                      , 0,
       0x0                 },        /* PP.LSXS */
};


NMD::Pool NMD::POOL32Axf_1_0[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000007f, &NMD::MFHI_DSP_        , 0,
       DSP_                },        /* MFHI[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000107f, &NMD::MFLO_DSP_        , 0,
       DSP_                },        /* MFLO[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000207f, &NMD::MTHI_DSP_        , 0,
       DSP_                },        /* MTHI[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000307f, &NMD::MTLO_DSP_        , 0,
       DSP_                },        /* MTLO[DSP] */
};


NMD::Pool NMD::POOL32Axf_1_1[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000027f, &NMD::MTHLIP           , 0,
       DSP_                },        /* MTHLIP */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000127f, &NMD::SHILOV           , 0,
       DSP_                },        /* SHILOV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0x2000227f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_1~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0x2000327f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_1~*(3) */
};


NMD::Pool NMD::POOL32Axf_1_3[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000067f, &NMD::RDDSP            , 0,
       DSP_                },        /* RDDSP */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000167f, &NMD::WRDSP            , 0,
       DSP_                },        /* WRDSP */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000267f, &NMD::EXTP             , 0,
       DSP_                },        /* EXTP */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x2000367f, &NMD::EXTPDP           , 0,
       DSP_                },        /* EXTPDP */
};


NMD::Pool NMD::POOL32Axf_1_4[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc001fff, 0x2000087f, &NMD::SHLL_QB          , 0,
       DSP_                },        /* SHLL.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc001fff, 0x2000187f, &NMD::SHRL_QB          , 0,
       DSP_                },        /* SHRL.QB */
};


NMD::Pool NMD::MAQ_S_A__W_PHR[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20000a7f, &NMD::MAQ_S_W_PHR      , 0,
       DSP_                },        /* MAQ_S.W.PHR */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20002a7f, &NMD::MAQ_SA_W_PHR     , 0,
       DSP_                },        /* MAQ_SA.W.PHR */
};


NMD::Pool NMD::MAQ_S_A__W_PHL[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20001a7f, &NMD::MAQ_S_W_PHL      , 0,
       DSP_                },        /* MAQ_S.W.PHL */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20003a7f, &NMD::MAQ_SA_W_PHL     , 0,
       DSP_                },        /* MAQ_SA.W.PHL */
};


NMD::Pool NMD::POOL32Axf_1_5[2] = {
    { pool                , MAQ_S_A__W_PHR      , 2   , 32,
       0xfc001fff, 0x20000a7f, 0                      , 0,
       0x0                 },        /* MAQ_S[A].W.PHR */
    { pool                , MAQ_S_A__W_PHL      , 2   , 32,
       0xfc001fff, 0x20001a7f, 0                      , 0,
       0x0                 },        /* MAQ_S[A].W.PHL */
};


NMD::Pool NMD::POOL32Axf_1_7[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20000e7f, &NMD::EXTR_W           , 0,
       DSP_                },        /* EXTR.W */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20001e7f, &NMD::EXTR_R_W         , 0,
       DSP_                },        /* EXTR_R.W */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20002e7f, &NMD::EXTR_RS_W        , 0,
       DSP_                },        /* EXTR_RS.W */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20003e7f, &NMD::EXTR_S_H         , 0,
       DSP_                },        /* EXTR_S.H */
};


NMD::Pool NMD::POOL32Axf_1[8] = {
    { pool                , POOL32Axf_1_0       , 4   , 32,
       0xfc000fff, 0x2000007f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_0 */
    { pool                , POOL32Axf_1_1       , 4   , 32,
       0xfc000fff, 0x2000027f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x2000047f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1~*(2) */
    { pool                , POOL32Axf_1_3       , 4   , 32,
       0xfc000fff, 0x2000067f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_3 */
    { pool                , POOL32Axf_1_4       , 2   , 32,
       0xfc000fff, 0x2000087f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_4 */
    { pool                , POOL32Axf_1_5       , 2   , 32,
       0xfc000fff, 0x20000a7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_5 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x20000c7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1~*(6) */
    { pool                , POOL32Axf_1_7       , 4   , 32,
       0xfc000fff, 0x20000e7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1_7 */
};


NMD::Pool NMD::POOL32Axf_2_DSP__0_7[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200000bf, &NMD::DPA_W_PH         , 0,
       DSP_                },        /* DPA.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200002bf, &NMD::DPAQ_S_W_PH      , 0,
       DSP_                },        /* DPAQ_S.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200004bf, &NMD::DPS_W_PH         , 0,
       DSP_                },        /* DPS.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200006bf, &NMD::DPSQ_S_W_PH      , 0,
       DSP_                },        /* DPSQ_S.W.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0x200008bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_0_7~*(4) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20000abf, &NMD::MADD_DSP_        , 0,
       DSP_                },        /* MADD[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20000cbf, &NMD::MULT_DSP_        , 0,
       DSP_                },        /* MULT[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20000ebf, &NMD::EXTRV_W          , 0,
       DSP_                },        /* EXTRV.W */
};


NMD::Pool NMD::POOL32Axf_2_DSP__8_15[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200010bf, &NMD::DPAX_W_PH        , 0,
       DSP_                },        /* DPAX.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200012bf, &NMD::DPAQ_SA_L_W      , 0,
       DSP_                },        /* DPAQ_SA.L.W */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200014bf, &NMD::DPSX_W_PH        , 0,
       DSP_                },        /* DPSX.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200016bf, &NMD::DPSQ_SA_L_W      , 0,
       DSP_                },        /* DPSQ_SA.L.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0x200018bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_8_15~*(4) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20001abf, &NMD::MADDU_DSP_       , 0,
       DSP_                },        /* MADDU[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20001cbf, &NMD::MULTU_DSP_       , 0,
       DSP_                },        /* MULTU[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20001ebf, &NMD::EXTRV_R_W        , 0,
       DSP_                },        /* EXTRV_R.W */
};


NMD::Pool NMD::POOL32Axf_2_DSP__16_23[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200020bf, &NMD::DPAU_H_QBL       , 0,
       DSP_                },        /* DPAU.H.QBL */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200022bf, &NMD::DPAQX_S_W_PH     , 0,
       DSP_                },        /* DPAQX_S.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200024bf, &NMD::DPSU_H_QBL       , 0,
       DSP_                },        /* DPSU.H.QBL */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200026bf, &NMD::DPSQX_S_W_PH     , 0,
       DSP_                },        /* DPSQX_S.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200028bf, &NMD::EXTPV            , 0,
       DSP_                },        /* EXTPV */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20002abf, &NMD::MSUB_DSP_        , 0,
       DSP_                },        /* MSUB[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20002cbf, &NMD::MULSA_W_PH       , 0,
       DSP_                },        /* MULSA.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20002ebf, &NMD::EXTRV_RS_W       , 0,
       DSP_                },        /* EXTRV_RS.W */
};


NMD::Pool NMD::POOL32Axf_2_DSP__24_31[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200030bf, &NMD::DPAU_H_QBR       , 0,
       DSP_                },        /* DPAU.H.QBR */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200032bf, &NMD::DPAQX_SA_W_PH    , 0,
       DSP_                },        /* DPAQX_SA.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200034bf, &NMD::DPSU_H_QBR       , 0,
       DSP_                },        /* DPSU.H.QBR */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200036bf, &NMD::DPSQX_SA_W_PH    , 0,
       DSP_                },        /* DPSQX_SA.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x200038bf, &NMD::EXTPDPV          , 0,
       DSP_                },        /* EXTPDPV */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20003abf, &NMD::MSUBU_DSP_       , 0,
       DSP_                },        /* MSUBU[DSP] */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20003cbf, &NMD::MULSAQ_S_W_PH    , 0,
       DSP_                },        /* MULSAQ_S.W.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0x20003ebf, &NMD::EXTRV_S_H        , 0,
       DSP_                },        /* EXTRV_S.H */
};


NMD::Pool NMD::POOL32Axf_2[4] = {
    { pool                , POOL32Axf_2_DSP__0_7, 8   , 32,
       0xfc0031ff, 0x200000bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_0_7 */
    { pool                , POOL32Axf_2_DSP__8_15, 8   , 32,
       0xfc0031ff, 0x200010bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_8_15 */
    { pool                , POOL32Axf_2_DSP__16_23, 8   , 32,
       0xfc0031ff, 0x200020bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_16_23 */
    { pool                , POOL32Axf_2_DSP__24_31, 8   , 32,
       0xfc0031ff, 0x200030bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2(DSP)_24_31 */
};


NMD::Pool NMD::POOL32Axf_4[128] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000013f, &NMD::ABSQ_S_QB        , 0,
       DSP_                },        /* ABSQ_S.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000033f, &NMD::REPLV_PH         , 0,
       DSP_                },        /* REPLV.PH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000053f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000073f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000093f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000d3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(7) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000113f, &NMD::ABSQ_S_PH        , 0,
       DSP_                },        /* ABSQ_S.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000133f, &NMD::REPLV_QB         , 0,
       DSP_                },        /* REPLV.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000153f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000173f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000193f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001d3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(15) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000213f, &NMD::ABSQ_S_W         , 0,
       DSP_                },        /* ABSQ_S.W */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000233f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000253f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000273f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000293f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002d3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000313f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000333f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000353f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000373f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000393f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003d3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(31) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000413f, &NMD::INSV             , 0,
       DSP_                },        /* INSV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000433f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(33) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000453f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(34) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000473f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(35) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000493f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(36) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20004b3f, &NMD::CLO              , 0,
       XMMS_               },        /* CLO */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20004d3f, &NMD::MFC2             , 0,
       CP2_                },        /* MFC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20004f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(39) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000513f, &NMD::PRECEQ_W_PHL     , 0,
       DSP_                },        /* PRECEQ.W.PHL */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000533f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(41) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000553f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(42) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000573f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(43) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000593f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(44) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20005b3f, &NMD::CLZ              , 0,
       XMMS_               },        /* CLZ */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20005d3f, &NMD::MTC2             , 0,
       CP2_                },        /* MTC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20005f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(47) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000613f, &NMD::PRECEQ_W_PHR     , 0,
       DSP_                },        /* PRECEQ.W.PHR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000633f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(49) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000653f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(50) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000673f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(51) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000693f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20006b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(53) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20006d3f, &NMD::DMFC2            , 0,
       CP2_                },        /* DMFC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20006f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(55) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000713f, &NMD::PRECEQU_PH_QBL   , 0,
       DSP_                },        /* PRECEQU.PH.QBL */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000733f, &NMD::PRECEQU_PH_QBLA  , 0,
       DSP_                },        /* PRECEQU.PH.QBLA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000753f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(58) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000773f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(59) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000793f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20007b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(61) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20007d3f, &NMD::DMTC2            , 0,
       CP2_                },        /* DMTC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20007f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(63) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000813f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(64) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000833f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(65) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000853f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(66) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000873f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(67) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000893f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(68) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20008b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(69) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20008d3f, &NMD::MFHC2            , 0,
       CP2_                },        /* MFHC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20008f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(71) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000913f, &NMD::PRECEQU_PH_QBR   , 0,
       DSP_                },        /* PRECEQU.PH.QBR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000933f, &NMD::PRECEQU_PH_QBRA  , 0,
       DSP_                },        /* PRECEQU.PH.QBRA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000953f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(74) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000973f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(75) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000993f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(76) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20009b3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(77) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x20009d3f, &NMD::MTHC2            , 0,
       CP2_                },        /* MTHC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20009f3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(79) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000a13f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(80) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000a33f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(81) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000a53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(82) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000a73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(83) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000a93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(84) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ab3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(85) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ad3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(86) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000af3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(87) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000b13f, &NMD::PRECEU_PH_QBL    , 0,
       DSP_                },        /* PRECEU.PH.QBL */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000b33f, &NMD::PRECEU_PH_QBLA   , 0,
       DSP_                },        /* PRECEU.PH.QBLA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000b53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(90) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000b73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(91) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000b93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(92) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000bb3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(93) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000bd3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(94) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000bf3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(95) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c13f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(96) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c33f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(97) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(98) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(99) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(100) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cb3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(101) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cd3f, &NMD::CFC2             , 0,
       CP2_                },        /* CFC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cf3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(103) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d13f, &NMD::PRECEU_PH_QBR    , 0,
       DSP_                },        /* PRECEU.PH.QBR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d33f, &NMD::PRECEU_PH_QBRA   , 0,
       DSP_                },        /* PRECEU.PH.QBRA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(106) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(107) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(108) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000db3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(109) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000dd3f, &NMD::CTC2             , 0,
       CP2_                },        /* CTC2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000df3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(111) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e13f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(112) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e33f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(113) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(114) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(115) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(116) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000eb3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(117) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ed3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(118) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ef3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(119) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f13f, &NMD::RADDU_W_QB       , 0,
       DSP_                },        /* RADDU.W.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f33f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(121) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f53f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(122) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f73f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(123) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f93f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(124) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000fb3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(125) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000fd3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(126) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ff3f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4~*(127) */
};


NMD::Pool NMD::POOL32Axf_5_group0[32] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000017f, &NMD::TLBGP            , 0,
       CP0_ | VZ_ | TLB_   },        /* TLBGP */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000037f, &NMD::TLBP             , 0,
       CP0_ | TLB_         },        /* TLBP */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000057f, &NMD::TLBGINV          , 0,
       CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINV */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000077f, &NMD::TLBINV           , 0,
       CP0_ | TLB_ | TLBINV_},        /* TLBINV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000097f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20000f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(7) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000117f, &NMD::TLBGR            , 0,
       CP0_ | VZ_ | TLB_   },        /* TLBGR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000137f, &NMD::TLBR             , 0,
       CP0_ | TLB_         },        /* TLBR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000157f, &NMD::TLBGINVF         , 0,
       CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINVF */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000177f, &NMD::TLBINVF          , 0,
       CP0_ | TLB_ | TLBINV_},        /* TLBINVF */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000197f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20001f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(15) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000217f, &NMD::TLBGWI           , 0,
       CP0_ | VZ_ | TLB_   },        /* TLBGWI */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000237f, &NMD::TLBWI            , 0,
       CP0_ | TLB_         },        /* TLBWI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000257f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000277f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000297f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20002f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(23) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000317f, &NMD::TLBGWR           , 0,
       CP0_ | VZ_ | TLB_   },        /* TLBGWR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000337f, &NMD::TLBWR            , 0,
       CP0_ | TLB_         },        /* TLBWR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000357f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000377f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000397f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20003f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0~*(31) */
};


NMD::Pool NMD::POOL32Axf_5_group1[32] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000417f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000437f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000457f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(2) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000477f, &NMD::DI               , 0,
       0x0                 },        /* DI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000497f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20004b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20004d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20004f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000517f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000537f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000557f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(10) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000577f, &NMD::EI               , 0,
       0x0                 },        /* EI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000597f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20005b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20005d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20005f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000617f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000637f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000657f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000677f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000697f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20006b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20006d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20006f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000717f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000737f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000757f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000777f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000797f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20007b7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20007d7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x20007f7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1~*(31) */
};


NMD::Pool NMD::ERETx[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc01ffff, 0x2000f37f, &NMD::ERET             , 0,
       0x0                 },        /* ERET */
    { instruction         , 0                   , 0   , 32,
       0xfc01ffff, 0x2001f37f, &NMD::ERETNC           , 0,
       0x0                 },        /* ERETNC */
};


NMD::Pool NMD::POOL32Axf_5_group3[32] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c17f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(0) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c37f, &NMD::WAIT             , 0,
       0x0                 },        /* WAIT */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c57f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c77f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000c97f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cb7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cd7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000cf7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d17f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(8) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d37f, &NMD::IRET             , 0,
       MCU_                },        /* IRET */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d57f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d77f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000d97f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000db7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000dd7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000df7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(15) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e17f, &NMD::RDPGPR           , 0,
       CP0_                },        /* RDPGPR */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e37f, &NMD::DERET            , 0,
       EJTAG_              },        /* DERET */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e57f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e77f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000e97f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000eb7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ed7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ef7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(23) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f17f, &NMD::WRPGPR           , 0,
       CP0_                },        /* WRPGPR */
    { pool                , ERETx               , 2   , 32,
       0xfc00ffff, 0x2000f37f, 0                      , 0,
       0x0                 },        /* ERETx */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f57f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f77f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000f97f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000fb7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000fd7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0x2000ff7f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3~*(31) */
};


NMD::Pool NMD::POOL32Axf_5[4] = {
    { pool                , POOL32Axf_5_group0  , 32  , 32,
       0xfc00c1ff, 0x2000017f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group0 */
    { pool                , POOL32Axf_5_group1  , 32  , 32,
       0xfc00c1ff, 0x2000417f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00c1ff, 0x2000817f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5~*(2) */
    { pool                , POOL32Axf_5_group3  , 32  , 32,
       0xfc00c1ff, 0x2000c17f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5_group3 */
};


NMD::Pool NMD::SHRA__R__QB[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc001fff, 0x200001ff, &NMD::SHRA_QB          , 0,
       DSP_                },        /* SHRA.QB */
    { instruction         , 0                   , 0   , 32,
       0xfc001fff, 0x200011ff, &NMD::SHRA_R_QB        , 0,
       DSP_                },        /* SHRA_R.QB */
};


NMD::Pool NMD::POOL32Axf_7[8] = {
    { pool                , SHRA__R__QB         , 2   , 32,
       0xfc000fff, 0x200001ff, 0                      , 0,
       0x0                 },        /* SHRA[_R].QB */
    { instruction         , 0                   , 0   , 32,
       0xfc000fff, 0x200003ff, &NMD::SHRL_PH          , 0,
       DSP_                },        /* SHRL.PH */
    { instruction         , 0                   , 0   , 32,
       0xfc000fff, 0x200005ff, &NMD::REPL_QB          , 0,
       DSP_                },        /* REPL.QB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x200007ff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x200009ff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x20000bff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x20000dff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000fff, 0x20000fff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7~*(7) */
};


NMD::Pool NMD::POOL32Axf[8] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0x2000003f, 0                      , 0,
       0x0                 },        /* POOL32Axf~*(0) */
    { pool                , POOL32Axf_1         , 8   , 32,
       0xfc0001ff, 0x2000007f, 0                      , 0,
       0x0                 },        /* POOL32Axf_1 */
    { pool                , POOL32Axf_2         , 4   , 32,
       0xfc0001ff, 0x200000bf, 0                      , 0,
       0x0                 },        /* POOL32Axf_2 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0x200000ff, 0                      , 0,
       0x0                 },        /* POOL32Axf~*(3) */
    { pool                , POOL32Axf_4         , 128 , 32,
       0xfc0001ff, 0x2000013f, 0                      , 0,
       0x0                 },        /* POOL32Axf_4 */
    { pool                , POOL32Axf_5         , 4   , 32,
       0xfc0001ff, 0x2000017f, 0                      , 0,
       0x0                 },        /* POOL32Axf_5 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0x200001bf, 0                      , 0,
       0x0                 },        /* POOL32Axf~*(6) */
    { pool                , POOL32Axf_7         , 8   , 32,
       0xfc0001ff, 0x200001ff, 0                      , 0,
       0x0                 },        /* POOL32Axf_7 */
};


NMD::Pool NMD::_POOL32A7[8] = {
    { pool                , P_LSX               , 2   , 32,
       0xfc00003f, 0x20000007, 0                      , 0,
       0x0                 },        /* P.LSX */
    { instruction         , 0                   , 0   , 32,
       0xfc00003f, 0x2000000f, &NMD::LSA              , 0,
       0x0                 },        /* LSA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0x20000017, 0                      , 0,
       0x0                 },        /* _POOL32A7~*(2) */
    { instruction         , 0                   , 0   , 32,
       0xfc00003f, 0x2000001f, &NMD::EXTW             , 0,
       0x0                 },        /* EXTW */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0x20000027, 0                      , 0,
       0x0                 },        /* _POOL32A7~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0x2000002f, 0                      , 0,
       0x0                 },        /* _POOL32A7~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0x20000037, 0                      , 0,
       0x0                 },        /* _POOL32A7~*(6) */
    { pool                , POOL32Axf           , 8   , 32,
       0xfc00003f, 0x2000003f, 0                      , 0,
       0x0                 },        /* POOL32Axf */
};


NMD::Pool NMD::P32A[8] = {
    { pool                , _POOL32A0           , 128 , 32,
       0xfc000007, 0x20000000, 0                      , 0,
       0x0                 },        /* _POOL32A0 */
    { instruction         , 0                   , 0   , 32,
       0xfc000007, 0x20000001, &NMD::SPECIAL2         , 0,
       UDI_                },        /* SPECIAL2 */
    { instruction         , 0                   , 0   , 32,
       0xfc000007, 0x20000002, &NMD::COP2_1           , 0,
       CP2_                },        /* COP2_1 */
    { instruction         , 0                   , 0   , 32,
       0xfc000007, 0x20000003, &NMD::UDI              , 0,
       UDI_                },        /* UDI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0x20000004, 0                      , 0,
       0x0                 },        /* P32A~*(4) */
    { pool                , _POOL32A5           , 128 , 32,
       0xfc000007, 0x20000005, 0                      , 0,
       0x0                 },        /* _POOL32A5 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0x20000006, 0                      , 0,
       0x0                 },        /* P32A~*(6) */
    { pool                , _POOL32A7           , 8   , 32,
       0xfc000007, 0x20000007, 0                      , 0,
       0x0                 },        /* _POOL32A7 */
};


NMD::Pool NMD::P_GP_D[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000007, 0x40000001, &NMD::LD_GP_           , 0,
       MIPS64_             },        /* LD[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc000007, 0x40000005, &NMD::SD_GP_           , 0,
       MIPS64_             },        /* SD[GP] */
};


NMD::Pool NMD::P_GP_W[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000003, 0x40000000, &NMD::ADDIU_GP_W_      , 0,
       0x0                 },        /* ADDIU[GP.W] */
    { pool                , P_GP_D              , 2   , 32,
       0xfc000003, 0x40000001, 0                      , 0,
       0x0                 },        /* P.GP.D */
    { instruction         , 0                   , 0   , 32,
       0xfc000003, 0x40000002, &NMD::LW_GP_           , 0,
       0x0                 },        /* LW[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc000003, 0x40000003, &NMD::SW_GP_           , 0,
       0x0                 },        /* SW[GP] */
};


NMD::Pool NMD::POOL48I[32] = {
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600000000000ull, &NMD::LI_48_           , 0,
       XMMS_               },        /* LI[48] */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600100000000ull, &NMD::ADDIU_48_        , 0,
       XMMS_               },        /* ADDIU[48] */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600200000000ull, &NMD::ADDIU_GP48_      , 0,
       XMMS_               },        /* ADDIU[GP48] */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600300000000ull, &NMD::ADDIUPC_48_      , 0,
       XMMS_               },        /* ADDIUPC[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600400000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(4) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600500000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(5) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600600000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(6) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600700000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(7) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600800000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(8) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600900000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(9) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600a00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(10) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600b00000000ull, &NMD::LWPC_48_         , 0,
       XMMS_               },        /* LWPC[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600c00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(12) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600d00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(13) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600e00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(14) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x600f00000000ull, &NMD::SWPC_48_         , 0,
       XMMS_               },        /* SWPC[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601000000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(16) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601100000000ull, &NMD::DADDIU_48_       , 0,
       MIPS64_             },        /* DADDIU[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601200000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(18) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601300000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(19) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601400000000ull, &NMD::DLUI_48_         , 0,
       MIPS64_             },        /* DLUI[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601500000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(21) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601600000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(22) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601700000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(23) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601800000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(24) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601900000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(25) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601a00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(26) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601b00000000ull, &NMD::LDPC_48_         , 0,
       MIPS64_             },        /* LDPC[48] */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601c00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(28) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601d00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(29) */
    { reserved_block      , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601e00000000ull, 0                      , 0,
       0x0                 },        /* POOL48I~*(30) */
    { instruction         , 0                   , 0   , 48,
       0xfc1f00000000ull, 0x601f00000000ull, &NMD::SDPC_48_         , 0,
       MIPS64_             },        /* SDPC[48] */
};


NMD::Pool NMD::PP_SR[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc10f003, 0x80003000, &NMD::SAVE_32_         , 0,
       0x0                 },        /* SAVE[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f003, 0x80003001, 0                      , 0,
       0x0                 },        /* PP.SR~*(1) */
    { instruction         , 0                   , 0   , 32,
       0xfc10f003, 0x80003002, &NMD::RESTORE_32_      , 0,
       0x0                 },        /* RESTORE[32] */
    { return_instruction  , 0                   , 0   , 32,
       0xfc10f003, 0x80003003, &NMD::RESTORE_JRC_32_  , 0,
       0x0                 },        /* RESTORE.JRC[32] */
};


NMD::Pool NMD::P_SR_F[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc10f007, 0x80103000, &NMD::SAVEF            , 0,
       CP1_                },        /* SAVEF */
    { instruction         , 0                   , 0   , 32,
       0xfc10f007, 0x80103001, &NMD::RESTOREF         , 0,
       CP1_                },        /* RESTOREF */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103002, 0                      , 0,
       0x0                 },        /* P.SR.F~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103003, 0                      , 0,
       0x0                 },        /* P.SR.F~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103004, 0                      , 0,
       0x0                 },        /* P.SR.F~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103005, 0                      , 0,
       0x0                 },        /* P.SR.F~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103006, 0                      , 0,
       0x0                 },        /* P.SR.F~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc10f007, 0x80103007, 0                      , 0,
       0x0                 },        /* P.SR.F~*(7) */
};


NMD::Pool NMD::P_SR[2] = {
    { pool                , PP_SR               , 4   , 32,
       0xfc10f000, 0x80003000, 0                      , 0,
       0x0                 },        /* PP.SR */
    { pool                , P_SR_F              , 8   , 32,
       0xfc10f000, 0x80103000, 0                      , 0,
       0x0                 },        /* P.SR.F */
};


NMD::Pool NMD::P_SLL[5] = {
    { instruction         , 0                   , 0   , 32,
       0xffe0f1ff, 0x8000c000, &NMD::NOP_32_          , 0,
       0x0                 },        /* NOP[32] */
    { instruction         , 0                   , 0   , 32,
       0xffe0f1ff, 0x8000c003, &NMD::EHB              , 0,
       0x0                 },        /* EHB */
    { instruction         , 0                   , 0   , 32,
       0xffe0f1ff, 0x8000c005, &NMD::PAUSE            , 0,
       0x0                 },        /* PAUSE */
    { instruction         , 0                   , 0   , 32,
       0xffe0f1ff, 0x8000c006, &NMD::SYNC             , 0,
       0x0                 },        /* SYNC */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c000, &NMD::SLL_32_          , 0,
       0x0                 },        /* SLL[32] */
};


NMD::Pool NMD::P_SHIFT[16] = {
    { pool                , P_SLL               , 5   , 32,
       0xfc00f1e0, 0x8000c000, 0                      , 0,
       0x0                 },        /* P.SLL */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c020, 0                      , 0,
       0x0                 },        /* P.SHIFT~*(1) */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c040, &NMD::SRL_32_          , 0,
       0x0                 },        /* SRL[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c060, 0                      , 0,
       0x0                 },        /* P.SHIFT~*(3) */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c080, &NMD::SRA              , 0,
       0x0                 },        /* SRA */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c0a0, 0                      , 0,
       0x0                 },        /* P.SHIFT~*(5) */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c0c0, &NMD::ROTR             , 0,
       0x0                 },        /* ROTR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c0e0, 0                      , 0,
       0x0                 },        /* P.SHIFT~*(7) */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c100, &NMD::DSLL             , 0,
       MIPS64_             },        /* DSLL */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c120, &NMD::DSLL32           , 0,
       MIPS64_             },        /* DSLL32 */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c140, &NMD::DSRL             , 0,
       MIPS64_             },        /* DSRL */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c160, &NMD::DSRL32           , 0,
       MIPS64_             },        /* DSRL32 */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c180, &NMD::DSRA             , 0,
       MIPS64_             },        /* DSRA */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c1a0, &NMD::DSRA32           , 0,
       MIPS64_             },        /* DSRA32 */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c1c0, &NMD::DROTR            , 0,
       MIPS64_             },        /* DROTR */
    { instruction         , 0                   , 0   , 32,
       0xfc00f1e0, 0x8000c1e0, &NMD::DROTR32          , 0,
       MIPS64_             },        /* DROTR32 */
};


NMD::Pool NMD::P_ROTX[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000d000, &NMD::ROTX             , 0,
       XMMS_               },        /* ROTX */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f820, 0x8000d020, 0                      , 0,
       0x0                 },        /* P.ROTX~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f820, 0x8000d800, 0                      , 0,
       0x0                 },        /* P.ROTX~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f820, 0x8000d820, 0                      , 0,
       0x0                 },        /* P.ROTX~*(3) */
};


NMD::Pool NMD::P_INS[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000e000, &NMD::INS              , 0,
       XMMS_               },        /* INS */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000e020, &NMD::DINSU            , 0,
       MIPS64_             },        /* DINSU */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000e800, &NMD::DINSM            , 0,
       MIPS64_             },        /* DINSM */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000e820, &NMD::DINS             , 0,
       MIPS64_             },        /* DINS */
};


NMD::Pool NMD::P_EXT[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000f000, &NMD::EXT              , 0,
       XMMS_               },        /* EXT */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000f020, &NMD::DEXTU            , 0,
       MIPS64_             },        /* DEXTU */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000f800, &NMD::DEXTM            , 0,
       MIPS64_             },        /* DEXTM */
    { instruction         , 0                   , 0   , 32,
       0xfc00f820, 0x8000f820, &NMD::DEXT             , 0,
       MIPS64_             },        /* DEXT */
};


NMD::Pool NMD::P_U12[16] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80000000, &NMD::ORI              , 0,
       0x0                 },        /* ORI */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80001000, &NMD::XORI             , 0,
       0x0                 },        /* XORI */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80002000, &NMD::ANDI_32_         , 0,
       0x0                 },        /* ANDI[32] */
    { pool                , P_SR                , 2   , 32,
       0xfc00f000, 0x80003000, 0                      , 0,
       0x0                 },        /* P.SR */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80004000, &NMD::SLTI             , 0,
       0x0                 },        /* SLTI */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80005000, &NMD::SLTIU            , 0,
       0x0                 },        /* SLTIU */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80006000, &NMD::SEQI             , 0,
       0x0                 },        /* SEQI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x80007000, 0                      , 0,
       0x0                 },        /* P.U12~*(7) */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80008000, &NMD::ADDIU_NEG_       , 0,
       0x0                 },        /* ADDIU[NEG] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x80009000, &NMD::DADDIU_U12_      , 0,
       MIPS64_             },        /* DADDIU[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8000a000, &NMD::DADDIU_NEG_      , 0,
       MIPS64_             },        /* DADDIU[NEG] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8000b000, &NMD::DROTX            , 0,
       MIPS64_             },        /* DROTX */
    { pool                , P_SHIFT             , 16  , 32,
       0xfc00f000, 0x8000c000, 0                      , 0,
       0x0                 },        /* P.SHIFT */
    { pool                , P_ROTX              , 4   , 32,
       0xfc00f000, 0x8000d000, 0                      , 0,
       0x0                 },        /* P.ROTX */
    { pool                , P_INS               , 4   , 32,
       0xfc00f000, 0x8000e000, 0                      , 0,
       0x0                 },        /* P.INS */
    { pool                , P_EXT               , 4   , 32,
       0xfc00f000, 0x8000f000, 0                      , 0,
       0x0                 },        /* P.EXT */
};


NMD::Pool NMD::RINT_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000020, &NMD::RINT_S           , 0,
       CP1_                },        /* RINT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000220, &NMD::RINT_D           , 0,
       CP1_                },        /* RINT.D */
};


NMD::Pool NMD::ADD_fmt0[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000030, &NMD::ADD_S            , 0,
       CP1_                },        /* ADD.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000230, 0                      , 0,
       CP1_                },        /* ADD.fmt0~*(1) */
};


NMD::Pool NMD::SELEQZ_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000038, &NMD::SELEQZ_S         , 0,
       CP1_                },        /* SELEQZ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000238, &NMD::SELEQZ_D         , 0,
       CP1_                },        /* SELEQZ.D */
};


NMD::Pool NMD::CLASS_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000060, &NMD::CLASS_S          , 0,
       CP1_                },        /* CLASS.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000260, &NMD::CLASS_D          , 0,
       CP1_                },        /* CLASS.D */
};


NMD::Pool NMD::SUB_fmt0[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000070, &NMD::SUB_S            , 0,
       CP1_                },        /* SUB.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000270, 0                      , 0,
       CP1_                },        /* SUB.fmt0~*(1) */
};


NMD::Pool NMD::SELNEZ_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000078, &NMD::SELNEZ_S         , 0,
       CP1_                },        /* SELNEZ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000278, &NMD::SELNEZ_D         , 0,
       CP1_                },        /* SELNEZ.D */
};


NMD::Pool NMD::MUL_fmt0[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00000b0, &NMD::MUL_S            , 0,
       CP1_                },        /* MUL.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa00002b0, 0                      , 0,
       CP1_                },        /* MUL.fmt0~*(1) */
};


NMD::Pool NMD::SEL_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00000b8, &NMD::SEL_S            , 0,
       CP1_                },        /* SEL.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00002b8, &NMD::SEL_D            , 0,
       CP1_                },        /* SEL.D */
};


NMD::Pool NMD::DIV_fmt0[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00000f0, &NMD::DIV_S            , 0,
       CP1_                },        /* DIV.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa00002f0, 0                      , 0,
       CP1_                },        /* DIV.fmt0~*(1) */
};


NMD::Pool NMD::ADD_fmt1[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000130, &NMD::ADD_D            , 0,
       CP1_                },        /* ADD.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000330, 0                      , 0,
       CP1_                },        /* ADD.fmt1~*(1) */
};


NMD::Pool NMD::SUB_fmt1[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000170, &NMD::SUB_D            , 0,
       CP1_                },        /* SUB.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa0000370, 0                      , 0,
       CP1_                },        /* SUB.fmt1~*(1) */
};


NMD::Pool NMD::MUL_fmt1[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00001b0, &NMD::MUL_D            , 0,
       CP1_                },        /* MUL.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa00003b0, 0                      , 0,
       CP1_                },        /* MUL.fmt1~*(1) */
};


NMD::Pool NMD::MADDF_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00001b8, &NMD::MADDF_S          , 0,
       CP1_                },        /* MADDF.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00003b8, &NMD::MADDF_D          , 0,
       CP1_                },        /* MADDF.D */
};


NMD::Pool NMD::DIV_fmt1[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00001f0, &NMD::DIV_D            , 0,
       CP1_                },        /* DIV.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0003ff, 0xa00003f0, 0                      , 0,
       CP1_                },        /* DIV.fmt1~*(1) */
};


NMD::Pool NMD::MSUBF_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00001f8, &NMD::MSUBF_S          , 0,
       CP1_                },        /* MSUBF.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0003ff, 0xa00003f8, &NMD::MSUBF_D          , 0,
       CP1_                },        /* MSUBF.D */
};


NMD::Pool NMD::POOL32F_0[64] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000000, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000008, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000010, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000018, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(3) */
    { pool                , RINT_fmt            , 2   , 32,
       0xfc0001ff, 0xa0000020, 0                      , 0,
       CP1_                },        /* RINT.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000028, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(5) */
    { pool                , ADD_fmt0            , 2   , 32,
       0xfc0001ff, 0xa0000030, 0                      , 0,
       CP1_                },        /* ADD.fmt0 */
    { pool                , SELEQZ_fmt          , 2   , 32,
       0xfc0001ff, 0xa0000038, 0                      , 0,
       CP1_                },        /* SELEQZ.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000040, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000048, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000050, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000058, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(11) */
    { pool                , CLASS_fmt           , 2   , 32,
       0xfc0001ff, 0xa0000060, 0                      , 0,
       CP1_                },        /* CLASS.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000068, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(13) */
    { pool                , SUB_fmt0            , 2   , 32,
       0xfc0001ff, 0xa0000070, 0                      , 0,
       CP1_                },        /* SUB.fmt0 */
    { pool                , SELNEZ_fmt          , 2   , 32,
       0xfc0001ff, 0xa0000078, 0                      , 0,
       CP1_                },        /* SELNEZ.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000080, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000088, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000090, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000098, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000a0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000a8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(21) */
    { pool                , MUL_fmt0            , 2   , 32,
       0xfc0001ff, 0xa00000b0, 0                      , 0,
       CP1_                },        /* MUL.fmt0 */
    { pool                , SEL_fmt             , 2   , 32,
       0xfc0001ff, 0xa00000b8, 0                      , 0,
       CP1_                },        /* SEL.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000c0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000c8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000d0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000d8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000e0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000e8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(29) */
    { pool                , DIV_fmt0            , 2   , 32,
       0xfc0001ff, 0xa00000f0, 0                      , 0,
       CP1_                },        /* DIV.fmt0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00000f8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(31) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000100, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(32) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000108, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(33) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000110, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(34) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000118, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(35) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000120, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(36) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000128, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(37) */
    { pool                , ADD_fmt1            , 2   , 32,
       0xfc0001ff, 0xa0000130, 0                      , 0,
       CP1_                },        /* ADD.fmt1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000138, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(39) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000140, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(40) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000148, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(41) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000150, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(42) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000158, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(43) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000160, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(44) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000168, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(45) */
    { pool                , SUB_fmt1            , 2   , 32,
       0xfc0001ff, 0xa0000170, 0                      , 0,
       CP1_                },        /* SUB.fmt1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000178, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(47) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000180, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(48) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000188, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(49) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000190, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(50) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa0000198, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(51) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001a0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001a8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(53) */
    { pool                , MUL_fmt1            , 2   , 32,
       0xfc0001ff, 0xa00001b0, 0                      , 0,
       CP1_                },        /* MUL.fmt1 */
    { pool                , MADDF_fmt           , 2   , 32,
       0xfc0001ff, 0xa00001b8, 0                      , 0,
       CP1_                },        /* MADDF.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001c0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(56) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001c8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(57) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001d0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(58) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001d8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(59) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001e0, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xa00001e8, 0                      , 0,
       CP1_                },        /* POOL32F_0~*(61) */
    { pool                , DIV_fmt1            , 2   , 32,
       0xfc0001ff, 0xa00001f0, 0                      , 0,
       CP1_                },        /* DIV.fmt1 */
    { pool                , MSUBF_fmt           , 2   , 32,
       0xfc0001ff, 0xa00001f8, 0                      , 0,
       CP1_                },        /* MSUBF.fmt */
};


NMD::Pool NMD::MIN_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa0000003, &NMD::MIN_S            , 0,
       CP1_                },        /* MIN.S */
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa0000203, &NMD::MIN_D            , 0,
       CP1_                },        /* MIN.D */
};


NMD::Pool NMD::MAX_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa000000b, &NMD::MAX_S            , 0,
       CP1_                },        /* MAX.S */
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa000020b, &NMD::MAX_D            , 0,
       CP1_                },        /* MAX.D */
};


NMD::Pool NMD::MINA_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa0000023, &NMD::MINA_S           , 0,
       CP1_                },        /* MINA.S */
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa0000223, &NMD::MINA_D           , 0,
       CP1_                },        /* MINA.D */
};


NMD::Pool NMD::MAXA_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa000002b, &NMD::MAXA_S           , 0,
       CP1_                },        /* MAXA.S */
    { instruction         , 0                   , 0   , 32,
       0xfc00023f, 0xa000022b, &NMD::MAXA_D           , 0,
       CP1_                },        /* MAXA.D */
};


NMD::Pool NMD::CVT_L_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000013b, &NMD::CVT_L_S          , 0,
       CP1_                },        /* CVT.L.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000413b, &NMD::CVT_L_D          , 0,
       CP1_                },        /* CVT.L.D */
};


NMD::Pool NMD::RSQRT_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000023b, &NMD::RSQRT_S          , 0,
       CP1_                },        /* RSQRT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000423b, &NMD::RSQRT_D          , 0,
       CP1_                },        /* RSQRT.D */
};


NMD::Pool NMD::FLOOR_L_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000033b, &NMD::FLOOR_L_S        , 0,
       CP1_                },        /* FLOOR.L.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000433b, &NMD::FLOOR_L_D        , 0,
       CP1_                },        /* FLOOR.L.D */
};


NMD::Pool NMD::CVT_W_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000093b, &NMD::CVT_W_S          , 0,
       CP1_                },        /* CVT.W.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000493b, &NMD::CVT_W_D          , 0,
       CP1_                },        /* CVT.W.D */
};


NMD::Pool NMD::SQRT_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0000a3b, &NMD::SQRT_S           , 0,
       CP1_                },        /* SQRT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0004a3b, &NMD::SQRT_D           , 0,
       CP1_                },        /* SQRT.D */
};


NMD::Pool NMD::FLOOR_W_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0000b3b, &NMD::FLOOR_W_S        , 0,
       CP1_                },        /* FLOOR.W.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0004b3b, &NMD::FLOOR_W_D        , 0,
       CP1_                },        /* FLOOR.W.D */
};


NMD::Pool NMD::RECIP_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000123b, &NMD::RECIP_S          , 0,
       CP1_                },        /* RECIP.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000523b, &NMD::RECIP_D          , 0,
       CP1_                },        /* RECIP.D */
};


NMD::Pool NMD::CEIL_L_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000133b, &NMD::CEIL_L_S         , 0,
       CP1_                },        /* CEIL.L.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000533b, &NMD::CEIL_L_D         , 0,
       CP1_                },        /* CEIL.L.D */
};


NMD::Pool NMD::CEIL_W_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0001b3b, &NMD::CEIL_W_S         , 0,
       CP1_                },        /* CEIL.W.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0005b3b, &NMD::CEIL_W_D         , 0,
       CP1_                },        /* CEIL.W.D */
};


NMD::Pool NMD::TRUNC_L_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000233b, &NMD::TRUNC_L_S        , 0,
       CP1_                },        /* TRUNC.L.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000633b, &NMD::TRUNC_L_D        , 0,
       CP1_                },        /* TRUNC.L.D */
};


NMD::Pool NMD::TRUNC_W_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0002b3b, &NMD::TRUNC_W_S        , 0,
       CP1_                },        /* TRUNC.W.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0006b3b, &NMD::TRUNC_W_D        , 0,
       CP1_                },        /* TRUNC.W.D */
};


NMD::Pool NMD::ROUND_L_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000333b, &NMD::ROUND_L_S        , 0,
       CP1_                },        /* ROUND.L.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000733b, &NMD::ROUND_L_D        , 0,
       CP1_                },        /* ROUND.L.D */
};


NMD::Pool NMD::ROUND_W_fmt[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0003b3b, &NMD::ROUND_W_S        , 0,
       CP1_                },        /* ROUND.W.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0007b3b, &NMD::ROUND_W_D        , 0,
       CP1_                },        /* ROUND.W.D */
};


NMD::Pool NMD::POOL32Fxf_0[64] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000003b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(0) */
    { pool                , CVT_L_fmt           , 2   , 32,
       0xfc003fff, 0xa000013b, 0                      , 0,
       CP1_                },        /* CVT.L.fmt */
    { pool                , RSQRT_fmt           , 2   , 32,
       0xfc003fff, 0xa000023b, 0                      , 0,
       CP1_                },        /* RSQRT.fmt */
    { pool                , FLOOR_L_fmt         , 2   , 32,
       0xfc003fff, 0xa000033b, 0                      , 0,
       CP1_                },        /* FLOOR.L.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000043b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000053b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000063b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000073b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000083b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(8) */
    { pool                , CVT_W_fmt           , 2   , 32,
       0xfc003fff, 0xa000093b, 0                      , 0,
       CP1_                },        /* CVT.W.fmt */
    { pool                , SQRT_fmt            , 2   , 32,
       0xfc003fff, 0xa0000a3b, 0                      , 0,
       CP1_                },        /* SQRT.fmt */
    { pool                , FLOOR_W_fmt         , 2   , 32,
       0xfc003fff, 0xa0000b3b, 0                      , 0,
       CP1_                },        /* FLOOR.W.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0000c3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0000d3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0000e3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0000f3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(15) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000103b, &NMD::CFC1             , 0,
       CP1_                },        /* CFC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000113b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(17) */
    { pool                , RECIP_fmt           , 2   , 32,
       0xfc003fff, 0xa000123b, 0                      , 0,
       CP1_                },        /* RECIP.fmt */
    { pool                , CEIL_L_fmt          , 2   , 32,
       0xfc003fff, 0xa000133b, 0                      , 0,
       CP1_                },        /* CEIL.L.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000143b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000153b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000163b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000173b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(23) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000183b, &NMD::CTC1             , 0,
       CP1_                },        /* CTC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000193b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0001a3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(26) */
    { pool                , CEIL_W_fmt          , 2   , 32,
       0xfc003fff, 0xa0001b3b, 0                      , 0,
       CP1_                },        /* CEIL.W.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0001c3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0001d3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0001e3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0001f3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(31) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000203b, &NMD::MFC1             , 0,
       CP1_                },        /* MFC1 */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000213b, &NMD::CVT_S_PL         , 0,
       CP1_                },        /* CVT.S.PL */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000223b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(34) */
    { pool                , TRUNC_L_fmt         , 2   , 32,
       0xfc003fff, 0xa000233b, 0                      , 0,
       CP1_                },        /* TRUNC.L.fmt */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000243b, &NMD::DMFC1            , 0,
       CP1_ | MIPS64_      },        /* DMFC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000253b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(37) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000263b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(38) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000273b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(39) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000283b, &NMD::MTC1             , 0,
       CP1_                },        /* MTC1 */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000293b, &NMD::CVT_S_PU         , 0,
       CP1_                },        /* CVT.S.PU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0002a3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(42) */
    { pool                , TRUNC_W_fmt         , 2   , 32,
       0xfc003fff, 0xa0002b3b, 0                      , 0,
       CP1_                },        /* TRUNC.W.fmt */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa0002c3b, &NMD::DMTC1            , 0,
       CP1_ | MIPS64_      },        /* DMTC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0002d3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(45) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0002e3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(46) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0002f3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(47) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000303b, &NMD::MFHC1            , 0,
       CP1_                },        /* MFHC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000313b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(49) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000323b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(50) */
    { pool                , ROUND_L_fmt         , 2   , 32,
       0xfc003fff, 0xa000333b, 0                      , 0,
       CP1_                },        /* ROUND.L.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000343b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000353b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(53) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000363b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(54) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000373b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(55) */
    { instruction         , 0                   , 0   , 32,
       0xfc003fff, 0xa000383b, &NMD::MTHC1            , 0,
       CP1_                },        /* MTHC1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa000393b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(57) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0003a3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(58) */
    { pool                , ROUND_W_fmt         , 2   , 32,
       0xfc003fff, 0xa0003b3b, 0                      , 0,
       CP1_                },        /* ROUND.W.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0003c3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0003d3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(61) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0003e3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(62) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc003fff, 0xa0003f3b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0~*(63) */
};


NMD::Pool NMD::MOV_fmt[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000007b, &NMD::MOV_S            , 0,
       CP1_                },        /* MOV.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000207b, &NMD::MOV_D            , 0,
       CP1_                },        /* MOV.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa000407b, 0                      , 0,
       CP1_                },        /* MOV.fmt~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa000607b, 0                      , 0,
       CP1_                },        /* MOV.fmt~*(3) */
};


NMD::Pool NMD::ABS_fmt[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000037b, &NMD::ABS_S            , 0,
       CP1_                },        /* ABS.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000237b, &NMD::ABS_D            , 0,
       CP1_                },        /* ABS.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa000437b, 0                      , 0,
       CP1_                },        /* ABS.fmt~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa000637b, 0                      , 0,
       CP1_                },        /* ABS.fmt~*(3) */
};


NMD::Pool NMD::NEG_fmt[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0000b7b, &NMD::NEG_S            , 0,
       CP1_                },        /* NEG.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0002b7b, &NMD::NEG_D            , 0,
       CP1_                },        /* NEG.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa0004b7b, 0                      , 0,
       CP1_                },        /* NEG.fmt~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa0006b7b, 0                      , 0,
       CP1_                },        /* NEG.fmt~*(3) */
};


NMD::Pool NMD::CVT_D_fmt[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000137b, &NMD::CVT_D_S          , 0,
       CP1_                },        /* CVT.D.S */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000337b, &NMD::CVT_D_W          , 0,
       CP1_                },        /* CVT.D.W */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa000537b, &NMD::CVT_D_L          , 0,
       CP1_                },        /* CVT.D.L */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa000737b, 0                      , 0,
       CP1_                },        /* CVT.D.fmt~*(3) */
};


NMD::Pool NMD::CVT_S_fmt[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0001b7b, &NMD::CVT_S_D          , 0,
       CP1_                },        /* CVT.S.D */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0003b7b, &NMD::CVT_S_W          , 0,
       CP1_                },        /* CVT.S.W */
    { instruction         , 0                   , 0   , 32,
       0xfc007fff, 0xa0005b7b, &NMD::CVT_S_L          , 0,
       CP1_                },        /* CVT.S.L */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007fff, 0xa0007b7b, 0                      , 0,
       CP1_                },        /* CVT.S.fmt~*(3) */
};


NMD::Pool NMD::POOL32Fxf_1[32] = {
    { pool                , MOV_fmt             , 4   , 32,
       0xfc001fff, 0xa000007b, 0                      , 0,
       CP1_                },        /* MOV.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000017b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000027b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(2) */
    { pool                , ABS_fmt             , 4   , 32,
       0xfc001fff, 0xa000037b, 0                      , 0,
       CP1_                },        /* ABS.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000047b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000057b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000067b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000077b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000087b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000097b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0000a7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(10) */
    { pool                , NEG_fmt             , 4   , 32,
       0xfc001fff, 0xa0000b7b, 0                      , 0,
       CP1_                },        /* NEG.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0000c7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0000d7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0000e7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0000f7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000107b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000117b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000127b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(18) */
    { pool                , CVT_D_fmt           , 4   , 32,
       0xfc001fff, 0xa000137b, 0                      , 0,
       CP1_                },        /* CVT.D.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000147b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000157b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000167b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000177b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000187b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa000197b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0001a7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(26) */
    { pool                , CVT_S_fmt           , 4   , 32,
       0xfc001fff, 0xa0001b7b, 0                      , 0,
       CP1_                },        /* CVT.S.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0001c7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0001d7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0001e7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc001fff, 0xa0001f7b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1~*(31) */
};


NMD::Pool NMD::POOL32Fxf[4] = {
    { pool                , POOL32Fxf_0         , 64  , 32,
       0xfc0000ff, 0xa000003b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_0 */
    { pool                , POOL32Fxf_1         , 32  , 32,
       0xfc0000ff, 0xa000007b, 0                      , 0,
       CP1_                },        /* POOL32Fxf_1 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0000ff, 0xa00000bb, 0                      , 0,
       CP1_                },        /* POOL32Fxf~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0000ff, 0xa00000fb, 0                      , 0,
       CP1_                },        /* POOL32Fxf~*(3) */
};


NMD::Pool NMD::POOL32F_3[8] = {
    { pool                , MIN_fmt             , 2   , 32,
       0xfc00003f, 0xa0000003, 0                      , 0,
       CP1_                },        /* MIN.fmt */
    { pool                , MAX_fmt             , 2   , 32,
       0xfc00003f, 0xa000000b, 0                      , 0,
       CP1_                },        /* MAX.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa0000013, 0                      , 0,
       CP1_                },        /* POOL32F_3~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa000001b, 0                      , 0,
       CP1_                },        /* POOL32F_3~*(3) */
    { pool                , MINA_fmt            , 2   , 32,
       0xfc00003f, 0xa0000023, 0                      , 0,
       CP1_                },        /* MINA.fmt */
    { pool                , MAXA_fmt            , 2   , 32,
       0xfc00003f, 0xa000002b, 0                      , 0,
       CP1_                },        /* MAXA.fmt */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa0000033, 0                      , 0,
       CP1_                },        /* POOL32F_3~*(6) */
    { pool                , POOL32Fxf           , 4   , 32,
       0xfc00003f, 0xa000003b, 0                      , 0,
       CP1_                },        /* POOL32Fxf */
};


NMD::Pool NMD::CMP_condn_S[32] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000005, &NMD::CMP_AF_S         , 0,
       CP1_                },        /* CMP.AF.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000045, &NMD::CMP_UN_S         , 0,
       CP1_                },        /* CMP.UN.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000085, &NMD::CMP_EQ_S         , 0,
       CP1_                },        /* CMP.EQ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00000c5, &NMD::CMP_UEQ_S        , 0,
       CP1_                },        /* CMP.UEQ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000105, &NMD::CMP_LT_S         , 0,
       CP1_                },        /* CMP.LT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000145, &NMD::CMP_ULT_S        , 0,
       CP1_                },        /* CMP.ULT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000185, &NMD::CMP_LE_S         , 0,
       CP1_                },        /* CMP.LE.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00001c5, &NMD::CMP_ULE_S        , 0,
       CP1_                },        /* CMP.ULE.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000205, &NMD::CMP_SAF_S        , 0,
       CP1_                },        /* CMP.SAF.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000245, &NMD::CMP_SUN_S        , 0,
       CP1_                },        /* CMP.SUN.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000285, &NMD::CMP_SEQ_S        , 0,
       CP1_                },        /* CMP.SEQ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00002c5, &NMD::CMP_SUEQ_S       , 0,
       CP1_                },        /* CMP.SUEQ.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000305, &NMD::CMP_SLT_S        , 0,
       CP1_                },        /* CMP.SLT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000345, &NMD::CMP_SULT_S       , 0,
       CP1_                },        /* CMP.SULT.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000385, &NMD::CMP_SLE_S        , 0,
       CP1_                },        /* CMP.SLE.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00003c5, &NMD::CMP_SULE_S       , 0,
       CP1_                },        /* CMP.SULE.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000405, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(16) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000445, &NMD::CMP_OR_S         , 0,
       CP1_                },        /* CMP.OR.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000485, &NMD::CMP_UNE_S        , 0,
       CP1_                },        /* CMP.UNE.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00004c5, &NMD::CMP_NE_S         , 0,
       CP1_                },        /* CMP.NE.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000505, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000545, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000585, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa00005c5, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000605, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(24) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000645, &NMD::CMP_SOR_S        , 0,
       CP1_                },        /* CMP.SOR.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000685, &NMD::CMP_SUNE_S       , 0,
       CP1_                },        /* CMP.SUNE.S */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00006c5, &NMD::CMP_SNE_S        , 0,
       CP1_                },        /* CMP.SNE.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000705, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000745, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000785, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa00007c5, 0                      , 0,
       CP1_                },        /* CMP.condn.S~*(31) */
};


NMD::Pool NMD::CMP_condn_D[32] = {
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000015, &NMD::CMP_AF_D         , 0,
       CP1_                },        /* CMP.AF.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000055, &NMD::CMP_UN_D         , 0,
       CP1_                },        /* CMP.UN.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000095, &NMD::CMP_EQ_D         , 0,
       CP1_                },        /* CMP.EQ.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00000d5, &NMD::CMP_UEQ_D        , 0,
       CP1_                },        /* CMP.UEQ.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000115, &NMD::CMP_LT_D         , 0,
       CP1_                },        /* CMP.LT.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000155, &NMD::CMP_ULT_D        , 0,
       CP1_                },        /* CMP.ULT.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000195, &NMD::CMP_LE_D         , 0,
       CP1_                },        /* CMP.LE.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00001d5, &NMD::CMP_ULE_D        , 0,
       CP1_                },        /* CMP.ULE.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000215, &NMD::CMP_SAF_D        , 0,
       CP1_                },        /* CMP.SAF.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000255, &NMD::CMP_SUN_D        , 0,
       CP1_                },        /* CMP.SUN.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000295, &NMD::CMP_SEQ_D        , 0,
       CP1_                },        /* CMP.SEQ.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00002d5, &NMD::CMP_SUEQ_D       , 0,
       CP1_                },        /* CMP.SUEQ.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000315, &NMD::CMP_SLT_D        , 0,
       CP1_                },        /* CMP.SLT.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000355, &NMD::CMP_SULT_D       , 0,
       CP1_                },        /* CMP.SULT.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000395, &NMD::CMP_SLE_D        , 0,
       CP1_                },        /* CMP.SLE.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00003d5, &NMD::CMP_SULE_D       , 0,
       CP1_                },        /* CMP.SULE.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000415, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(16) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000455, &NMD::CMP_OR_D         , 0,
       CP1_                },        /* CMP.OR.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000495, &NMD::CMP_UNE_D        , 0,
       CP1_                },        /* CMP.UNE.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00004d5, &NMD::CMP_NE_D         , 0,
       CP1_                },        /* CMP.NE.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000515, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000555, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000595, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa00005d5, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000615, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(24) */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000655, &NMD::CMP_SOR_D        , 0,
       CP1_                },        /* CMP.SOR.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000695, &NMD::CMP_SUNE_D       , 0,
       CP1_                },        /* CMP.SUNE.D */
    { instruction         , 0                   , 0   , 32,
       0xfc0007ff, 0xa00006d5, &NMD::CMP_SNE_D        , 0,
       CP1_                },        /* CMP.SNE.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000715, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000755, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa0000795, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0007ff, 0xa00007d5, 0                      , 0,
       CP1_                },        /* CMP.condn.D~*(31) */
};


NMD::Pool NMD::POOL32F_5[8] = {
    { pool                , CMP_condn_S         , 32  , 32,
       0xfc00003f, 0xa0000005, 0                      , 0,
       CP1_                },        /* CMP.condn.S */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa000000d, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(1) */
    { pool                , CMP_condn_D         , 32  , 32,
       0xfc00003f, 0xa0000015, 0                      , 0,
       CP1_                },        /* CMP.condn.D */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa000001d, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa0000025, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa000002d, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa0000035, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xa000003d, 0                      , 0,
       CP1_                },        /* POOL32F_5~*(7) */
};


NMD::Pool NMD::POOL32F[8] = {
    { pool                , POOL32F_0           , 64  , 32,
       0xfc000007, 0xa0000000, 0                      , 0,
       CP1_                },        /* POOL32F_0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xa0000001, 0                      , 0,
       CP1_                },        /* POOL32F~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xa0000002, 0                      , 0,
       CP1_                },        /* POOL32F~*(2) */
    { pool                , POOL32F_3           , 8   , 32,
       0xfc000007, 0xa0000003, 0                      , 0,
       CP1_                },        /* POOL32F_3 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xa0000004, 0                      , 0,
       CP1_                },        /* POOL32F~*(4) */
    { pool                , POOL32F_5           , 8   , 32,
       0xfc000007, 0xa0000005, 0                      , 0,
       CP1_                },        /* POOL32F_5 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xa0000006, 0                      , 0,
       CP1_                },        /* POOL32F~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xa0000007, 0                      , 0,
       CP1_                },        /* POOL32F~*(7) */
};


NMD::Pool NMD::POOL32S_0[64] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000000, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(0) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000008, &NMD::DLSA             , 0,
       MIPS64_             },        /* DLSA */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000010, &NMD::DSLLV            , 0,
       MIPS64_             },        /* DSLLV */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000018, &NMD::DMUL             , 0,
       MIPS64_             },        /* DMUL */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000020, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000028, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000030, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000038, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000040, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000048, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(9) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000050, &NMD::DSRLV            , 0,
       MIPS64_             },        /* DSRLV */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000058, &NMD::DMUH             , 0,
       MIPS64_             },        /* DMUH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000060, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000068, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000070, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000078, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000080, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000088, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(17) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000090, &NMD::DSRAV            , 0,
       MIPS64_             },        /* DSRAV */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000098, &NMD::DMULU            , 0,
       MIPS64_             },        /* DMULU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000a0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000a8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000b0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000b8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000c0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000c8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(25) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000d0, &NMD::DROTRV           , 0,
       MIPS64_             },        /* DROTRV */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000d8, &NMD::DMUHU            , 0,
       MIPS64_             },        /* DMUHU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000e0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000e8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000f0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000f8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(31) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000100, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(32) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000108, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(33) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000110, &NMD::DADD             , 0,
       MIPS64_             },        /* DADD */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000118, &NMD::DDIV             , 0,
       MIPS64_             },        /* DDIV */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000120, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(36) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000128, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(37) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000130, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(38) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000138, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(39) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000140, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(40) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000148, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(41) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000150, &NMD::DADDU            , 0,
       MIPS64_             },        /* DADDU */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000158, &NMD::DMOD             , 0,
       MIPS64_             },        /* DMOD */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000160, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(44) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000168, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(45) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000170, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(46) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000178, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(47) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000180, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(48) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000188, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(49) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000190, &NMD::DSUB             , 0,
       MIPS64_             },        /* DSUB */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc0000198, &NMD::DDIVU            , 0,
       MIPS64_             },        /* DDIVU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001a0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001a8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(53) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001b0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(54) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001b8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(55) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001c0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(56) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001c8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(57) */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001d0, &NMD::DSUBU            , 0,
       MIPS64_             },        /* DSUBU */
    { instruction         , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001d8, &NMD::DMODU            , 0,
       MIPS64_             },        /* DMODU */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001e0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001e8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(61) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001f0, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(62) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001f8, 0                      , 0,
       0x0                 },        /* POOL32S_0~*(63) */
};


NMD::Pool NMD::POOL32Sxf_4[128] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000013c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000033c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000053c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000073c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000093c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0000b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0000d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0000f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000113c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000133c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000153c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000173c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000193c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0001b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0001d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0001f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000213c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000233c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000253c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000273c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000293c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0002b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0002d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0002f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000313c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000333c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000353c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000373c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000393c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0003b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0003d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0003f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(31) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000413c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(32) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000433c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(33) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000453c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(34) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000473c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(35) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000493c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(36) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0xc0004b3c, &NMD::DCLO             , 0,
       MIPS64_             },        /* DCLO */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0004d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(38) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0004f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(39) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000513c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(40) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000533c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(41) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000553c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(42) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000573c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(43) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000593c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(44) */
    { instruction         , 0                   , 0   , 32,
       0xfc00ffff, 0xc0005b3c, &NMD::DCLZ             , 0,
       MIPS64_             },        /* DCLZ */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0005d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(46) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0005f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(47) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000613c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(48) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000633c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(49) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000653c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(50) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000673c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(51) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000693c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(52) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0006b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(53) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0006d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(54) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0006f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(55) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000713c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(56) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000733c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(57) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000753c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(58) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000773c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(59) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000793c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(60) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0007b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(61) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0007d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(62) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0007f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(63) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000813c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(64) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000833c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(65) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000853c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(66) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000873c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(67) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000893c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(68) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0008b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(69) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0008d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(70) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0008f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(71) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000913c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(72) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000933c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(73) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000953c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(74) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000973c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(75) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000993c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(76) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0009b3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(77) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0009d3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(78) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc0009f3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(79) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000a13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(80) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000a33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(81) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000a53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(82) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000a73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(83) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000a93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(84) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000ab3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(85) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000ad3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(86) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000af3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(87) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000b13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(88) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000b33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(89) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000b53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(90) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000b73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(91) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000b93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(92) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000bb3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(93) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000bd3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(94) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000bf3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(95) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000c13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(96) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000c33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(97) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000c53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(98) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000c73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(99) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000c93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(100) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000cb3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(101) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000cd3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(102) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000cf3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(103) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000d13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(104) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000d33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(105) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000d53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(106) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000d73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(107) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000d93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(108) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000db3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(109) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000dd3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(110) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000df3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(111) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000e13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(112) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000e33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(113) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000e53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(114) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000e73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(115) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000e93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(116) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000eb3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(117) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000ed3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(118) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000ef3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(119) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000f13c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(120) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000f33c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(121) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000f53c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(122) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000f73c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(123) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000f93c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(124) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000fb3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(125) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000fd3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(126) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00ffff, 0xc000ff3c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4~*(127) */
};


NMD::Pool NMD::POOL32Sxf[8] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc000003c, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc000007c, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000bc, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00000fc, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(3) */
    { pool                , POOL32Sxf_4         , 128 , 32,
       0xfc0001ff, 0xc000013c, 0                      , 0,
       0x0                 },        /* POOL32Sxf_4 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc000017c, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001bc, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc0001ff, 0xc00001fc, 0                      , 0,
       0x0                 },        /* POOL32Sxf~*(7) */
};


NMD::Pool NMD::POOL32S_4[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00003f, 0xc0000004, &NMD::EXTD             , 0,
       MIPS64_             },        /* EXTD */
    { instruction         , 0                   , 0   , 32,
       0xfc00003f, 0xc000000c, &NMD::EXTD32           , 0,
       MIPS64_             },        /* EXTD32 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xc0000014, 0                      , 0,
       0x0                 },        /* POOL32S_4~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xc000001c, 0                      , 0,
       0x0                 },        /* POOL32S_4~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xc0000024, 0                      , 0,
       0x0                 },        /* POOL32S_4~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xc000002c, 0                      , 0,
       0x0                 },        /* POOL32S_4~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00003f, 0xc0000034, 0                      , 0,
       0x0                 },        /* POOL32S_4~*(6) */
    { pool                , POOL32Sxf           , 8   , 32,
       0xfc00003f, 0xc000003c, 0                      , 0,
       0x0                 },        /* POOL32Sxf */
};


NMD::Pool NMD::POOL32S[8] = {
    { pool                , POOL32S_0           , 64  , 32,
       0xfc000007, 0xc0000000, 0                      , 0,
       0x0                 },        /* POOL32S_0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000001, 0                      , 0,
       0x0                 },        /* POOL32S~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000002, 0                      , 0,
       0x0                 },        /* POOL32S~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000003, 0                      , 0,
       0x0                 },        /* POOL32S~*(3) */
    { pool                , POOL32S_4           , 8   , 32,
       0xfc000007, 0xc0000004, 0                      , 0,
       0x0                 },        /* POOL32S_4 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000005, 0                      , 0,
       0x0                 },        /* POOL32S~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000006, 0                      , 0,
       0x0                 },        /* POOL32S~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000007, 0xc0000007, 0                      , 0,
       0x0                 },        /* POOL32S~*(7) */
};


NMD::Pool NMD::P_LUI[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000002, 0xe0000000, &NMD::LUI              , 0,
       0x0                 },        /* LUI */
    { instruction         , 0                   , 0   , 32,
       0xfc000002, 0xe0000002, &NMD::ALUIPC           , 0,
       0x0                 },        /* ALUIPC */
};


NMD::Pool NMD::P_GP_LH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1c0001, 0x44100000, &NMD::LH_GP_           , 0,
       0x0                 },        /* LH[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0001, 0x44100001, &NMD::LHU_GP_          , 0,
       0x0                 },        /* LHU[GP] */
};


NMD::Pool NMD::P_GP_SH[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1c0001, 0x44140000, &NMD::SH_GP_           , 0,
       0x0                 },        /* SH[GP] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1c0001, 0x44140001, 0                      , 0,
       0x0                 },        /* P.GP.SH~*(1) */
};


NMD::Pool NMD::P_GP_CP1[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1c0003, 0x44180000, &NMD::LWC1_GP_         , 0,
       CP1_                },        /* LWC1[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0003, 0x44180001, &NMD::SWC1_GP_         , 0,
       CP1_                },        /* SWC1[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0003, 0x44180002, &NMD::LDC1_GP_         , 0,
       CP1_                },        /* LDC1[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0003, 0x44180003, &NMD::SDC1_GP_         , 0,
       CP1_                },        /* SDC1[GP] */
};


NMD::Pool NMD::P_GP_M64[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1c0003, 0x441c0000, &NMD::LWU_GP_          , 0,
       MIPS64_             },        /* LWU[GP] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1c0003, 0x441c0001, 0                      , 0,
       0x0                 },        /* P.GP.M64~*(1) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1c0003, 0x441c0002, 0                      , 0,
       0x0                 },        /* P.GP.M64~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1c0003, 0x441c0003, 0                      , 0,
       0x0                 },        /* P.GP.M64~*(3) */
};


NMD::Pool NMD::P_GP_BH[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc1c0000, 0x44000000, &NMD::LB_GP_           , 0,
       0x0                 },        /* LB[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0000, 0x44040000, &NMD::SB_GP_           , 0,
       0x0                 },        /* SB[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0000, 0x44080000, &NMD::LBU_GP_          , 0,
       0x0                 },        /* LBU[GP] */
    { instruction         , 0                   , 0   , 32,
       0xfc1c0000, 0x440c0000, &NMD::ADDIU_GP_B_      , 0,
       0x0                 },        /* ADDIU[GP.B] */
    { pool                , P_GP_LH             , 2   , 32,
       0xfc1c0000, 0x44100000, 0                      , 0,
       0x0                 },        /* P.GP.LH */
    { pool                , P_GP_SH             , 2   , 32,
       0xfc1c0000, 0x44140000, 0                      , 0,
       0x0                 },        /* P.GP.SH */
    { pool                , P_GP_CP1            , 4   , 32,
       0xfc1c0000, 0x44180000, 0                      , 0,
       0x0                 },        /* P.GP.CP1 */
    { pool                , P_GP_M64            , 4   , 32,
       0xfc1c0000, 0x441c0000, 0                      , 0,
       0x0                 },        /* P.GP.M64 */
};


NMD::Pool NMD::P_LS_U12[16] = {
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84000000, &NMD::LB_U12_          , 0,
       0x0                 },        /* LB[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84001000, &NMD::SB_U12_          , 0,
       0x0                 },        /* SB[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84002000, &NMD::LBU_U12_         , 0,
       0x0                 },        /* LBU[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84003000, &NMD::PREF_U12_        , 0,
       0x0                 },        /* PREF[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84004000, &NMD::LH_U12_          , 0,
       0x0                 },        /* LH[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84005000, &NMD::SH_U12_          , 0,
       0x0                 },        /* SH[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84006000, &NMD::LHU_U12_         , 0,
       0x0                 },        /* LHU[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84007000, &NMD::LWU_U12_         , 0,
       MIPS64_             },        /* LWU[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84008000, &NMD::LW_U12_          , 0,
       0x0                 },        /* LW[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x84009000, &NMD::SW_U12_          , 0,
       0x0                 },        /* SW[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400a000, &NMD::LWC1_U12_        , 0,
       CP1_                },        /* LWC1[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400b000, &NMD::SWC1_U12_        , 0,
       CP1_                },        /* SWC1[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400c000, &NMD::LD_U12_          , 0,
       MIPS64_             },        /* LD[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400d000, &NMD::SD_U12_          , 0,
       MIPS64_             },        /* SD[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400e000, &NMD::LDC1_U12_        , 0,
       CP1_                },        /* LDC1[U12] */
    { instruction         , 0                   , 0   , 32,
       0xfc00f000, 0x8400f000, &NMD::SDC1_U12_        , 0,
       CP1_                },        /* SDC1[U12] */
};


NMD::Pool NMD::P_PREF_S9_[2] = {
    { instruction         , 0                   , 0   , 32,
       0xffe07f00, 0xa7e01800, &NMD::SYNCI            , 0,
       0x0                 },        /* SYNCI */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4001800, &NMD::PREF_S9_         , &NMD::PREF_S9__cond    ,
       0x0                 },        /* PREF[S9] */
};


NMD::Pool NMD::P_LS_S0[16] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4000000, &NMD::LB_S9_           , 0,
       0x0                 },        /* LB[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4000800, &NMD::SB_S9_           , 0,
       0x0                 },        /* SB[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4001000, &NMD::LBU_S9_          , 0,
       0x0                 },        /* LBU[S9] */
    { pool                , P_PREF_S9_          , 2   , 32,
       0xfc007f00, 0xa4001800, 0                      , 0,
       0x0                 },        /* P.PREF[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002000, &NMD::LH_S9_           , 0,
       0x0                 },        /* LH[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002800, &NMD::SH_S9_           , 0,
       0x0                 },        /* SH[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4003000, &NMD::LHU_S9_          , 0,
       0x0                 },        /* LHU[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4003800, &NMD::LWU_S9_          , 0,
       MIPS64_             },        /* LWU[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004000, &NMD::LW_S9_           , 0,
       0x0                 },        /* LW[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004800, &NMD::SW_S9_           , 0,
       0x0                 },        /* SW[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4005000, &NMD::LWC1_S9_         , 0,
       CP1_                },        /* LWC1[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4005800, &NMD::SWC1_S9_         , 0,
       CP1_                },        /* SWC1[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4006000, &NMD::LD_S9_           , 0,
       MIPS64_             },        /* LD[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4006800, &NMD::SD_S9_           , 0,
       MIPS64_             },        /* SD[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4007000, &NMD::LDC1_S9_         , 0,
       CP1_                },        /* LDC1[S9] */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4007800, &NMD::SDC1_S9_         , 0,
       CP1_                },        /* SDC1[S9] */
};


NMD::Pool NMD::ASET_ACLR[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfe007f00, 0xa4001100, &NMD::ASET             , 0,
       MCU_                },        /* ASET */
    { instruction         , 0                   , 0   , 32,
       0xfe007f00, 0xa6001100, &NMD::ACLR             , 0,
       MCU_                },        /* ACLR */
};


NMD::Pool NMD::P_LL[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005100, &NMD::LL               , 0,
       0x0                 },        /* LL */
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005101, &NMD::LLWP             , 0,
       XNP_                },        /* LLWP */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005102, 0                      , 0,
       0x0                 },        /* P.LL~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005103, 0                      , 0,
       0x0                 },        /* P.LL~*(3) */
};


NMD::Pool NMD::P_SC[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005900, &NMD::SC               , 0,
       0x0                 },        /* SC */
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005901, &NMD::SCWP             , 0,
       XNP_                },        /* SCWP */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005902, 0                      , 0,
       0x0                 },        /* P.SC~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005903, 0                      , 0,
       0x0                 },        /* P.SC~*(3) */
};


NMD::Pool NMD::P_LLD[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f07, 0xa4007100, &NMD::LLD              , 0,
       MIPS64_             },        /* LLD */
    { instruction         , 0                   , 0   , 32,
       0xfc007f07, 0xa4007101, &NMD::LLDP             , 0,
       MIPS64_             },        /* LLDP */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007102, 0                      , 0,
       0x0                 },        /* P.LLD~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007103, 0                      , 0,
       0x0                 },        /* P.LLD~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007104, 0                      , 0,
       0x0                 },        /* P.LLD~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007105, 0                      , 0,
       0x0                 },        /* P.LLD~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007106, 0                      , 0,
       0x0                 },        /* P.LLD~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007107, 0                      , 0,
       0x0                 },        /* P.LLD~*(7) */
};


NMD::Pool NMD::P_SCD[8] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f07, 0xa4007900, &NMD::SCD              , 0,
       MIPS64_             },        /* SCD */
    { instruction         , 0                   , 0   , 32,
       0xfc007f07, 0xa4007901, &NMD::SCDP             , 0,
       MIPS64_             },        /* SCDP */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007902, 0                      , 0,
       0x0                 },        /* P.SCD~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007903, 0                      , 0,
       0x0                 },        /* P.SCD~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007904, 0                      , 0,
       0x0                 },        /* P.SCD~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007905, 0                      , 0,
       0x0                 },        /* P.SCD~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007906, 0                      , 0,
       0x0                 },        /* P.SCD~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f07, 0xa4007907, 0                      , 0,
       0x0                 },        /* P.SCD~*(7) */
};


NMD::Pool NMD::P_LS_S1[16] = {
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4000100, 0                      , 0,
       0x0                 },        /* P.LS.S1~*(0) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4000900, 0                      , 0,
       0x0                 },        /* P.LS.S1~*(1) */
    { pool                , ASET_ACLR           , 2   , 32,
       0xfc007f00, 0xa4001100, 0                      , 0,
       0x0                 },        /* ASET_ACLR */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4001900, 0                      , 0,
       0x0                 },        /* P.LS.S1~*(3) */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002100, &NMD::UALH             , 0,
       XMMS_               },        /* UALH */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002900, &NMD::UASH             , 0,
       XMMS_               },        /* UASH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4003100, 0                      , 0,
       0x0                 },        /* P.LS.S1~*(6) */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4003900, &NMD::CACHE            , 0,
       CP0_                },        /* CACHE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004100, &NMD::LWC2             , 0,
       CP2_                },        /* LWC2 */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004900, &NMD::SWC2             , 0,
       CP2_                },        /* SWC2 */
    { pool                , P_LL                , 4   , 32,
       0xfc007f00, 0xa4005100, 0                      , 0,
       0x0                 },        /* P.LL */
    { pool                , P_SC                , 4   , 32,
       0xfc007f00, 0xa4005900, 0                      , 0,
       0x0                 },        /* P.SC */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4006100, &NMD::LDC2             , 0,
       CP2_                },        /* LDC2 */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4006900, &NMD::SDC2             , 0,
       CP2_                },        /* SDC2 */
    { pool                , P_LLD               , 8   , 32,
       0xfc007f00, 0xa4007100, 0                      , 0,
       0x0                 },        /* P.LLD */
    { pool                , P_SCD               , 8   , 32,
       0xfc007f00, 0xa4007900, 0                      , 0,
       0x0                 },        /* P.SCD */
};


NMD::Pool NMD::P_PREFE[2] = {
    { instruction         , 0                   , 0   , 32,
       0xffe07f00, 0xa7e01a00, &NMD::SYNCIE           , 0,
       CP0_ | EVA_         },        /* SYNCIE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4001a00, &NMD::PREFE            , &NMD::PREFE_cond       ,
       CP0_ | EVA_         },        /* PREFE */
};


NMD::Pool NMD::P_LLE[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005200, &NMD::LLE              , 0,
       CP0_ | EVA_         },        /* LLE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005201, &NMD::LLWPE            , 0,
       CP0_ | EVA_         },        /* LLWPE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005202, 0                      , 0,
       0x0                 },        /* P.LLE~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005203, 0                      , 0,
       0x0                 },        /* P.LLE~*(3) */
};


NMD::Pool NMD::P_SCE[4] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005a00, &NMD::SCE              , 0,
       CP0_ | EVA_         },        /* SCE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f03, 0xa4005a01, &NMD::SCWPE            , 0,
       CP0_ | EVA_         },        /* SCWPE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005a02, 0                      , 0,
       0x0                 },        /* P.SCE~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f03, 0xa4005a03, 0                      , 0,
       0x0                 },        /* P.SCE~*(3) */
};


NMD::Pool NMD::P_LS_E0[16] = {
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4000200, &NMD::LBE              , 0,
       CP0_ | EVA_         },        /* LBE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4000a00, &NMD::SBE              , 0,
       CP0_ | EVA_         },        /* SBE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4001200, &NMD::LBUE             , 0,
       CP0_ | EVA_         },        /* LBUE */
    { pool                , P_PREFE             , 2   , 32,
       0xfc007f00, 0xa4001a00, 0                      , 0,
       0x0                 },        /* P.PREFE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002200, &NMD::LHE              , 0,
       CP0_ | EVA_         },        /* LHE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4002a00, &NMD::SHE              , 0,
       CP0_ | EVA_         },        /* SHE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4003200, &NMD::LHUE             , 0,
       CP0_ | EVA_         },        /* LHUE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4003a00, &NMD::CACHEE           , 0,
       CP0_ | EVA_         },        /* CACHEE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004200, &NMD::LWE              , 0,
       CP0_ | EVA_         },        /* LWE */
    { instruction         , 0                   , 0   , 32,
       0xfc007f00, 0xa4004a00, &NMD::SWE              , 0,
       CP0_ | EVA_         },        /* SWE */
    { pool                , P_LLE               , 4   , 32,
       0xfc007f00, 0xa4005200, 0                      , 0,
       0x0                 },        /* P.LLE */
    { pool                , P_SCE               , 4   , 32,
       0xfc007f00, 0xa4005a00, 0                      , 0,
       0x0                 },        /* P.SCE */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4006200, 0                      , 0,
       0x0                 },        /* P.LS.E0~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4006a00, 0                      , 0,
       0x0                 },        /* P.LS.E0~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4007200, 0                      , 0,
       0x0                 },        /* P.LS.E0~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc007f00, 0xa4007a00, 0                      , 0,
       0x0                 },        /* P.LS.E0~*(15) */
};


NMD::Pool NMD::P_LS_WM[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000400, &NMD::LWM              , 0,
       XMMS_               },        /* LWM */
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000c00, &NMD::SWM              , 0,
       XMMS_               },        /* SWM */
};


NMD::Pool NMD::P_LS_UAWM[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000500, &NMD::UALWM            , 0,
       XMMS_               },        /* UALWM */
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000d00, &NMD::UASWM            , 0,
       XMMS_               },        /* UASWM */
};


NMD::Pool NMD::P_LS_DM[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000600, &NMD::LDM              , 0,
       MIPS64_             },        /* LDM */
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000e00, &NMD::SDM              , 0,
       MIPS64_             },        /* SDM */
};


NMD::Pool NMD::P_LS_UADM[2] = {
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000700, &NMD::UALDM            , 0,
       MIPS64_             },        /* UALDM */
    { instruction         , 0                   , 0   , 32,
       0xfc000f00, 0xa4000f00, &NMD::UASDM            , 0,
       MIPS64_             },        /* UASDM */
};


NMD::Pool NMD::P_LS_S9[8] = {
    { pool                , P_LS_S0             , 16  , 32,
       0xfc000700, 0xa4000000, 0                      , 0,
       0x0                 },        /* P.LS.S0 */
    { pool                , P_LS_S1             , 16  , 32,
       0xfc000700, 0xa4000100, 0                      , 0,
       0x0                 },        /* P.LS.S1 */
    { pool                , P_LS_E0             , 16  , 32,
       0xfc000700, 0xa4000200, 0                      , 0,
       0x0                 },        /* P.LS.E0 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000700, 0xa4000300, 0                      , 0,
       0x0                 },        /* P.LS.S9~*(3) */
    { pool                , P_LS_WM             , 2   , 32,
       0xfc000700, 0xa4000400, 0                      , 0,
       0x0                 },        /* P.LS.WM */
    { pool                , P_LS_UAWM           , 2   , 32,
       0xfc000700, 0xa4000500, 0                      , 0,
       0x0                 },        /* P.LS.UAWM */
    { pool                , P_LS_DM             , 2   , 32,
       0xfc000700, 0xa4000600, 0                      , 0,
       0x0                 },        /* P.LS.DM */
    { pool                , P_LS_UADM           , 2   , 32,
       0xfc000700, 0xa4000700, 0                      , 0,
       0x0                 },        /* P.LS.UADM */
};


NMD::Pool NMD::P_BAL[2] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xfe000000, 0x28000000, &NMD::BC_32_           , 0,
       0x0                 },        /* BC[32] */
    { call_instruction    , 0                   , 0   , 32,
       0xfe000000, 0x2a000000, &NMD::BALC_32_         , 0,
       0x0                 },        /* BALC[32] */
};


NMD::Pool NMD::P_BALRSC[2] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xffe0f000, 0x48008000, &NMD::BRSC             , 0,
       0x0                 },        /* BRSC */
    { call_instruction    , 0                   , 0   , 32,
       0xfc00f000, 0x48008000, &NMD::BALRSC           , &NMD::BALRSC_cond      ,
       0x0                 },        /* BALRSC */
};


NMD::Pool NMD::P_J[16] = {
    { call_instruction    , 0                   , 0   , 32,
       0xfc00f000, 0x48000000, &NMD::JALRC_32_        , 0,
       0x0                 },        /* JALRC[32] */
    { call_instruction    , 0                   , 0   , 32,
       0xfc00f000, 0x48001000, &NMD::JALRC_HB         , 0,
       0x0                 },        /* JALRC.HB */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48002000, 0                      , 0,
       0x0                 },        /* P.J~*(2) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48003000, 0                      , 0,
       0x0                 },        /* P.J~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48004000, 0                      , 0,
       0x0                 },        /* P.J~*(4) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48005000, 0                      , 0,
       0x0                 },        /* P.J~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48006000, 0                      , 0,
       0x0                 },        /* P.J~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48007000, 0                      , 0,
       0x0                 },        /* P.J~*(7) */
    { pool                , P_BALRSC            , 2   , 32,
       0xfc00f000, 0x48008000, 0                      , 0,
       0x0                 },        /* P.BALRSC */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x48009000, 0                      , 0,
       0x0                 },        /* P.J~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800a000, 0                      , 0,
       0x0                 },        /* P.J~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800b000, 0                      , 0,
       0x0                 },        /* P.J~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800c000, 0                      , 0,
       0x0                 },        /* P.J~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800d000, 0                      , 0,
       0x0                 },        /* P.J~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800e000, 0                      , 0,
       0x0                 },        /* P.J~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00f000, 0x4800f000, 0                      , 0,
       0x0                 },        /* P.J~*(15) */
};


NMD::Pool NMD::P_BR3A[32] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1fc000, 0x88004000, &NMD::BC1EQZC          , 0,
       CP1_                },        /* BC1EQZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1fc000, 0x88014000, &NMD::BC1NEZC          , 0,
       CP1_                },        /* BC1NEZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1fc000, 0x88024000, &NMD::BC2EQZC          , 0,
       CP2_                },        /* BC2EQZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1fc000, 0x88034000, &NMD::BC2NEZC          , 0,
       CP2_                },        /* BC2NEZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1fc000, 0x88044000, &NMD::BPOSGE32C        , 0,
       DSP_                },        /* BPOSGE32C */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88054000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(5) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88064000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(6) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88074000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88084000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(8) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88094000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(9) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880a4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(10) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880b4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880c4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(12) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880d4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(13) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880e4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(14) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x880f4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88104000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(16) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88114000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(17) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88124000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(18) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88134000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88144000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(20) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88154000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(21) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88164000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(22) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88174000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88184000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(24) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x88194000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881a4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(26) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881b4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881c4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(28) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881d4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(29) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881e4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc1fc000, 0x881f4000, 0                      , 0,
       0x0                 },        /* P.BR3A~*(31) */
};


NMD::Pool NMD::P_BR1[4] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0x88000000, &NMD::BEQC_32_         , 0,
       0x0                 },        /* BEQC[32] */
    { pool                , P_BR3A              , 32  , 32,
       0xfc00c000, 0x88004000, 0                      , 0,
       0x0                 },        /* P.BR3A */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0x88008000, &NMD::BGEC             , 0,
       0x0                 },        /* BGEC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0x8800c000, &NMD::BGEUC            , 0,
       0x0                 },        /* BGEUC */
};


NMD::Pool NMD::P_BR2[4] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0xa8000000, &NMD::BNEC_32_         , 0,
       0x0                 },        /* BNEC[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc00c000, 0xa8004000, 0                      , 0,
       0x0                 },        /* P.BR2~*(1) */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0xa8008000, &NMD::BLTC             , 0,
       0x0                 },        /* BLTC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc00c000, 0xa800c000, &NMD::BLTUC            , 0,
       0x0                 },        /* BLTUC */
};


NMD::Pool NMD::P_BRI[8] = {
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8000000, &NMD::BEQIC            , 0,
       0x0                 },        /* BEQIC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8040000, &NMD::BBEQZC           , 0,
       XMMS_               },        /* BBEQZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8080000, &NMD::BGEIC            , 0,
       0x0                 },        /* BGEIC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc80c0000, &NMD::BGEIUC           , 0,
       0x0                 },        /* BGEIUC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8100000, &NMD::BNEIC            , 0,
       0x0                 },        /* BNEIC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8140000, &NMD::BBNEZC           , 0,
       XMMS_               },        /* BBNEZC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc8180000, &NMD::BLTIC            , 0,
       0x0                 },        /* BLTIC */
    { branch_instruction  , 0                   , 0   , 32,
       0xfc1c0000, 0xc81c0000, &NMD::BLTIUC           , 0,
       0x0                 },        /* BLTIUC */
};


NMD::Pool NMD::P32[32] = {
    { pool                , P_ADDIU             , 2   , 32,
       0xfc000000, 0x00000000, 0                      , 0,
       0x0                 },        /* P.ADDIU */
    { pool                , P32A                , 8   , 32,
       0xfc000000, 0x20000000, 0                      , 0,
       0x0                 },        /* P32A */
    { pool                , P_GP_W              , 4   , 32,
       0xfc000000, 0x40000000, 0                      , 0,
       0x0                 },        /* P.GP.W */
    { pool                , POOL48I             , 32  , 48,
       0xfc0000000000ull, 0x600000000000ull, 0                      , 0,
       0x0                 },        /* POOL48I */
    { pool                , P_U12               , 16  , 32,
       0xfc000000, 0x80000000, 0                      , 0,
       0x0                 },        /* P.U12 */
    { pool                , POOL32F             , 8   , 32,
       0xfc000000, 0xa0000000, 0                      , 0,
       CP1_                },        /* POOL32F */
    { pool                , POOL32S             , 8   , 32,
       0xfc000000, 0xc0000000, 0                      , 0,
       0x0                 },        /* POOL32S */
    { pool                , P_LUI               , 2   , 32,
       0xfc000000, 0xe0000000, 0                      , 0,
       0x0                 },        /* P.LUI */
    { instruction         , 0                   , 0   , 32,
       0xfc000000, 0x04000000, &NMD::ADDIUPC_32_      , 0,
       0x0                 },        /* ADDIUPC[32] */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x24000000, 0                      , 0,
       0x0                 },        /* P32~*(5) */
    { pool                , P_GP_BH             , 8   , 32,
       0xfc000000, 0x44000000, 0                      , 0,
       0x0                 },        /* P.GP.BH */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x64000000, 0                      , 0,
       0x0                 },        /* P32~*(13) */
    { pool                , P_LS_U12            , 16  , 32,
       0xfc000000, 0x84000000, 0                      , 0,
       0x0                 },        /* P.LS.U12 */
    { pool                , P_LS_S9             , 8   , 32,
       0xfc000000, 0xa4000000, 0                      , 0,
       0x0                 },        /* P.LS.S9 */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xc4000000, 0                      , 0,
       0x0                 },        /* P32~*(25) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xe4000000, 0                      , 0,
       0x0                 },        /* P32~*(29) */
    { call_instruction    , 0                   , 0   , 32,
       0xfc000000, 0x08000000, &NMD::MOVE_BALC        , 0,
       XMMS_               },        /* MOVE.BALC */
    { pool                , P_BAL               , 2   , 32,
       0xfc000000, 0x28000000, 0                      , 0,
       0x0                 },        /* P.BAL */
    { pool                , P_J                 , 16  , 32,
       0xfc000000, 0x48000000, 0                      , 0,
       0x0                 },        /* P.J */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x68000000, 0                      , 0,
       0x0                 },        /* P32~*(14) */
    { pool                , P_BR1               , 4   , 32,
       0xfc000000, 0x88000000, 0                      , 0,
       0x0                 },        /* P.BR1 */
    { pool                , P_BR2               , 4   , 32,
       0xfc000000, 0xa8000000, 0                      , 0,
       0x0                 },        /* P.BR2 */
    { pool                , P_BRI               , 8   , 32,
       0xfc000000, 0xc8000000, 0                      , 0,
       0x0                 },        /* P.BRI */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xe8000000, 0                      , 0,
       0x0                 },        /* P32~*(30) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x0c000000, 0                      , 0,
       0x0                 },        /* P32~*(3) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x2c000000, 0                      , 0,
       0x0                 },        /* P32~*(7) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x4c000000, 0                      , 0,
       0x0                 },        /* P32~*(11) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x6c000000, 0                      , 0,
       0x0                 },        /* P32~*(15) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0x8c000000, 0                      , 0,
       0x0                 },        /* P32~*(19) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xac000000, 0                      , 0,
       0x0                 },        /* P32~*(23) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xcc000000, 0                      , 0,
       0x0                 },        /* P32~*(27) */
    { reserved_block      , 0                   , 0   , 32,
       0xfc000000, 0xec000000, 0                      , 0,
       0x0                 },        /* P32~*(31) */
};


NMD::Pool NMD::P16_SYSCALL[2] = {
    { instruction         , 0                   , 0   , 16,
       0xfffc    , 0x1008    , &NMD::SYSCALL_16_      , 0,
       0x0                 },        /* SYSCALL[16] */
    { instruction         , 0                   , 0   , 16,
       0xfffc    , 0x100c    , &NMD::HYPCALL_16_      , 0,
       CP0_ | VZ_          },        /* HYPCALL[16] */
};


NMD::Pool NMD::P16_RI[4] = {
    { reserved_block      , 0                   , 0   , 16,
       0xfff8    , 0x1000    , 0                      , 0,
       0x0                 },        /* P16.RI~*(0) */
    { pool                , P16_SYSCALL         , 2   , 16,
       0xfff8    , 0x1008    , 0                      , 0,
       0x0                 },        /* P16.SYSCALL */
    { instruction         , 0                   , 0   , 16,
       0xfff8    , 0x1010    , &NMD::BREAK_16_        , 0,
       0x0                 },        /* BREAK[16] */
    { instruction         , 0                   , 0   , 16,
       0xfff8    , 0x1018    , &NMD::SDBBP_16_        , 0,
       EJTAG_              },        /* SDBBP[16] */
};


NMD::Pool NMD::P16_MV[2] = {
    { pool                , P16_RI              , 4   , 16,
       0xffe0    , 0x1000    , 0                      , 0,
       0x0                 },        /* P16.RI */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x1000    , &NMD::MOVE             , &NMD::MOVE_cond        ,
       0x0                 },        /* MOVE */
};


NMD::Pool NMD::P16_SHIFT[2] = {
    { instruction         , 0                   , 0   , 16,
       0xfc08    , 0x3000    , &NMD::SLL_16_          , 0,
       0x0                 },        /* SLL[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc08    , 0x3008    , &NMD::SRL_16_          , 0,
       0x0                 },        /* SRL[16] */
};


NMD::Pool NMD::POOL16C_00[4] = {
    { instruction         , 0                   , 0   , 16,
       0xfc0f    , 0x5000    , &NMD::NOT_16_          , 0,
       0x0                 },        /* NOT[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc0f    , 0x5004    , &NMD::XOR_16_          , 0,
       0x0                 },        /* XOR[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc0f    , 0x5008    , &NMD::AND_16_          , 0,
       0x0                 },        /* AND[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc0f    , 0x500c    , &NMD::OR_16_           , 0,
       0x0                 },        /* OR[16] */
};


NMD::Pool NMD::POOL16C_0[2] = {
    { pool                , POOL16C_00          , 4   , 16,
       0xfc03    , 0x5000    , 0                      , 0,
       0x0                 },        /* POOL16C_00 */
    { reserved_block      , 0                   , 0   , 16,
       0xfc03    , 0x5002    , 0                      , 0,
       0x0                 },        /* POOL16C_0~*(1) */
};


NMD::Pool NMD::P16C[2] = {
    { pool                , POOL16C_0           , 2   , 16,
       0xfc01    , 0x5000    , 0                      , 0,
       0x0                 },        /* POOL16C_0 */
    { instruction         , 0                   , 0   , 16,
       0xfc01    , 0x5001    , &NMD::LWXS_16_         , 0,
       0x0                 },        /* LWXS[16] */
};


NMD::Pool NMD::P16_A1[2] = {
    { reserved_block      , 0                   , 0   , 16,
       0xfc40    , 0x7000    , 0                      , 0,
       0x0                 },        /* P16.A1~*(0) */
    { instruction         , 0                   , 0   , 16,
       0xfc40    , 0x7040    , &NMD::ADDIU_R1_SP_     , 0,
       0x0                 },        /* ADDIU[R1.SP] */
};


NMD::Pool NMD::P_ADDIU_RS5_[2] = {
    { instruction         , 0                   , 0   , 16,
       0xffe8    , 0x9008    , &NMD::NOP_16_          , 0,
       0x0                 },        /* NOP[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc08    , 0x9008    , &NMD::ADDIU_RS5_       , &NMD::ADDIU_RS5__cond  ,
       0x0                 },        /* ADDIU[RS5] */
};


NMD::Pool NMD::P16_A2[2] = {
    { instruction         , 0                   , 0   , 16,
       0xfc08    , 0x9000    , &NMD::ADDIU_R2_        , 0,
       0x0                 },        /* ADDIU[R2] */
    { pool                , P_ADDIU_RS5_        , 2   , 16,
       0xfc08    , 0x9008    , 0                      , 0,
       0x0                 },        /* P.ADDIU[RS5] */
};


NMD::Pool NMD::P16_ADDU[2] = {
    { instruction         , 0                   , 0   , 16,
       0xfc01    , 0xb000    , &NMD::ADDU_16_         , 0,
       0x0                 },        /* ADDU[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc01    , 0xb001    , &NMD::SUBU_16_         , 0,
       0x0                 },        /* SUBU[16] */
};


NMD::Pool NMD::P16_JRC[2] = {
    { branch_instruction  , 0                   , 0   , 16,
       0xfc1f    , 0xd800    , &NMD::JRC              , 0,
       0x0                 },        /* JRC */
    { call_instruction    , 0                   , 0   , 16,
       0xfc1f    , 0xd810    , &NMD::JALRC_16_        , 0,
       0x0                 },        /* JALRC[16] */
};


NMD::Pool NMD::P16_BR1[2] = {
    { branch_instruction  , 0                   , 0   , 16,
       0xfc00    , 0xd800    , &NMD::BEQC_16_         , &NMD::BEQC_16__cond    ,
       XMMS_               },        /* BEQC[16] */
    { branch_instruction  , 0                   , 0   , 16,
       0xfc00    , 0xd800    , &NMD::BNEC_16_         , &NMD::BNEC_16__cond    ,
       XMMS_               },        /* BNEC[16] */
};


NMD::Pool NMD::P16_BR[2] = {
    { pool                , P16_JRC             , 2   , 16,
       0xfc0f    , 0xd800    , 0                      , 0,
       0x0                 },        /* P16.JRC */
    { pool                , P16_BR1             , 2   , 16,
       0xfc00    , 0xd800    , 0                      , &NMD::P16_BR1_cond     ,
       0x0                 },        /* P16.BR1 */
};


NMD::Pool NMD::P16_SR[2] = {
    { instruction         , 0                   , 0   , 16,
       0xfd00    , 0x1c00    , &NMD::SAVE_16_         , 0,
       0x0                 },        /* SAVE[16] */
    { return_instruction  , 0                   , 0   , 16,
       0xfd00    , 0x1d00    , &NMD::RESTORE_JRC_16_  , 0,
       0x0                 },        /* RESTORE.JRC[16] */
};


NMD::Pool NMD::P16_4X4[4] = {
    { instruction         , 0                   , 0   , 16,
       0xfd08    , 0x3c00    , &NMD::ADDU_4X4_        , 0,
       XMMS_               },        /* ADDU[4X4] */
    { instruction         , 0                   , 0   , 16,
       0xfd08    , 0x3c08    , &NMD::MUL_4X4_         , 0,
       XMMS_               },        /* MUL[4X4] */
    { reserved_block      , 0                   , 0   , 16,
       0xfd08    , 0x3d00    , 0                      , 0,
       0x0                 },        /* P16.4X4~*(2) */
    { reserved_block      , 0                   , 0   , 16,
       0xfd08    , 0x3d08    , 0                      , 0,
       0x0                 },        /* P16.4X4~*(3) */
};


NMD::Pool NMD::P16_LB[4] = {
    { instruction         , 0                   , 0   , 16,
       0xfc0c    , 0x5c00    , &NMD::LB_16_           , 0,
       0x0                 },        /* LB[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc0c    , 0x5c04    , &NMD::SB_16_           , 0,
       0x0                 },        /* SB[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc0c    , 0x5c08    , &NMD::LBU_16_          , 0,
       0x0                 },        /* LBU[16] */
    { reserved_block      , 0                   , 0   , 16,
       0xfc0c    , 0x5c0c    , 0                      , 0,
       0x0                 },        /* P16.LB~*(3) */
};


NMD::Pool NMD::P16_LH[4] = {
    { instruction         , 0                   , 0   , 16,
       0xfc09    , 0x7c00    , &NMD::LH_16_           , 0,
       0x0                 },        /* LH[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc09    , 0x7c01    , &NMD::SH_16_           , 0,
       0x0                 },        /* SH[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc09    , 0x7c08    , &NMD::LHU_16_          , 0,
       0x0                 },        /* LHU[16] */
    { reserved_block      , 0                   , 0   , 16,
       0xfc09    , 0x7c09    , 0                      , 0,
       0x0                 },        /* P16.LH~*(3) */
};


NMD::Pool NMD::P16[32] = {
    { pool                , P16_MV              , 2   , 16,
       0xfc00    , 0x1000    , 0                      , 0,
       0x0                 },        /* P16.MV */
    { pool                , P16_SHIFT           , 2   , 16,
       0xfc00    , 0x3000    , 0                      , 0,
       0x0                 },        /* P16.SHIFT */
    { pool                , P16C                , 2   , 16,
       0xfc00    , 0x5000    , 0                      , 0,
       0x0                 },        /* P16C */
    { pool                , P16_A1              , 2   , 16,
       0xfc00    , 0x7000    , 0                      , 0,
       0x0                 },        /* P16.A1 */
    { pool                , P16_A2              , 2   , 16,
       0xfc00    , 0x9000    , 0                      , 0,
       0x0                 },        /* P16.A2 */
    { pool                , P16_ADDU            , 2   , 16,
       0xfc00    , 0xb000    , 0                      , 0,
       0x0                 },        /* P16.ADDU */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xd000    , &NMD::LI_16_           , 0,
       0x0                 },        /* LI[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xf000    , &NMD::ANDI_16_         , 0,
       0x0                 },        /* ANDI[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x1400    , &NMD::LW_16_           , 0,
       0x0                 },        /* LW[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x3400    , &NMD::LW_SP_           , 0,
       0x0                 },        /* LW[SP] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x5400    , &NMD::LW_GP16_         , 0,
       0x0                 },        /* LW[GP16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x7400    , &NMD::LW_4X4_          , 0,
       XMMS_               },        /* LW[4X4] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0x9400    , &NMD::SW_16_           , 0,
       0x0                 },        /* SW[16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xb400    , &NMD::SW_SP_           , 0,
       0x0                 },        /* SW[SP] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xd400    , &NMD::SW_GP16_         , 0,
       0x0                 },        /* SW[GP16] */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xf400    , &NMD::SW_4X4_          , 0,
       XMMS_               },        /* SW[4X4] */
    { branch_instruction  , 0                   , 0   , 16,
       0xfc00    , 0x1800    , &NMD::BC_16_           , 0,
       0x0                 },        /* BC[16] */
    { call_instruction    , 0                   , 0   , 16,
       0xfc00    , 0x3800    , &NMD::BALC_16_         , 0,
       0x0                 },        /* BALC[16] */
    { reserved_block      , 0                   , 0   , 16,
       0xfc00    , 0x5800    , 0                      , 0,
       0x0                 },        /* P16~*(10) */
    { reserved_block      , 0                   , 0   , 16,
       0xfc00    , 0x7800    , 0                      , 0,
       0x0                 },        /* P16~*(14) */
    { branch_instruction  , 0                   , 0   , 16,
       0xfc00    , 0x9800    , &NMD::BEQZC_16_        , 0,
       0x0                 },        /* BEQZC[16] */
    { branch_instruction  , 0                   , 0   , 16,
       0xfc00    , 0xb800    , &NMD::BNEZC_16_        , 0,
       0x0                 },        /* BNEZC[16] */
    { pool                , P16_BR              , 2   , 16,
       0xfc00    , 0xd800    , 0                      , 0,
       0x0                 },        /* P16.BR */
    { reserved_block      , 0                   , 0   , 16,
       0xfc00    , 0xf800    , 0                      , 0,
       0x0                 },        /* P16~*(30) */
    { pool                , P16_SR              , 2   , 16,
       0xfc00    , 0x1c00    , 0                      , 0,
       0x0                 },        /* P16.SR */
    { pool                , P16_4X4             , 4   , 16,
       0xfc00    , 0x3c00    , 0                      , 0,
       0x0                 },        /* P16.4X4 */
    { pool                , P16_LB              , 4   , 16,
       0xfc00    , 0x5c00    , 0                      , 0,
       0x0                 },        /* P16.LB */
    { pool                , P16_LH              , 4   , 16,
       0xfc00    , 0x7c00    , 0                      , 0,
       0x0                 },        /* P16.LH */
    { reserved_block      , 0                   , 0   , 16,
       0xfc00    , 0x9c00    , 0                      , 0,
       0x0                 },        /* P16~*(19) */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xbc00    , &NMD::MOVEP            , 0,
       XMMS_               },        /* MOVEP */
    { reserved_block      , 0                   , 0   , 16,
       0xfc00    , 0xdc00    , 0                      , 0,
       0x0                 },        /* P16~*(27) */
    { instruction         , 0                   , 0   , 16,
       0xfc00    , 0xfc00    , &NMD::MOVEP_REV_       , 0,
       XMMS_               },        /* MOVEP[REV] */
};


NMD::Pool NMD::MAJOR[2] = {
    { pool                , P32                 , 32  , 32,
       0x10000000, 0x00000000, 0                      , 0,
       0x0                 },        /* P32 */
    { pool                , P16                 , 32  , 16,
       0x1000    , 0x1000    , 0                      , 0,
       0x0                 },        /* P16 */
};
