On Sunday, July 5, 2020, Aleksandar Markovic <
aleksandar.qemu.de...@gmail.com> wrote:

>
>
> On Saturday, July 4, 2020, Aleksandar Markovic <
> aleksandar.qemu.de...@gmail.com> wrote:
>
>>
>>
>> On Friday, July 3, 2020, Stefan Brankovic <stefanbrankovi...@gmail.com>
>> wrote:
>>
>>> Add disassembler for Loongson 2F instruction set.
>>>
>>> Testing is done by comparing qemu disassembly output, obtained by
>>> using -d in_asm command line option, with appropriate objdump output.
>>>
>>> This disassembler is written as a generic disassembler that can be
>>> integrated into other projects. In this case, it is integrated into
>>> QEMU. One of initial key requirements was that it uses C++ as its
>>> language.
>>>
>>> Signed-off-by: Stefan Brankovic <stefan.branko...@syrmia.com>
>>> ---
>>
>>
>>
> I did some basic tests, and the output matches objdump's.
>
> Apart from the mentioned cosmetic changes with ALIAS_MAX_LEN, there is one
> function invocation that should be under "ifdef", similar to the nanomips
> counterpart case.
>
> Otherwise:
>
> Reviewed-by: Aleksandar Markovic <aleksandar.qemu.de...@gmail.com>
>
>
I plan to select this patch for the next MIPS + TCG Continuous Benchmarking
pull request.


>
>
>> Thank you, Stefan!
>>
>> I am going to dor some independant testing in next few days, including
>> building on systems without g++ (build should be successful, and the
>> disassembler should fallback on the current one).
>>
>> I noticed some cosmetic improvements may still be done, like, for
>> example, using [ALIAS_MAX_LEN] instead of [5] in numerous places. But,
>> there is no need to respin (send a new version) just for this. Overall, the
>> code looks well-organized and clean.
>>
>> An interesting topic for future work would be the automation of QEMU
>> disassembler testing. Not only for this dissasembler, but for any supported
>> disassembler in QEMU. I don't say you should do it, this is just a
>> brainstorming idea, somebody may hopefully pick it up.
>>
>> Congratulations on this interesting work!
>>
>> Aleksandar
>>
>>
>>
>>
>>>  MAINTAINERS             |    1 +
>>>  configure               |    1 +
>>>  disas/Makefile.objs     |    1 +
>>>  disas/loongson2f.cpp    | 8154 +++++++++++++++++++++++++++++++++++++++
>>>  disas/loongson2f.h      | 2562 ++++++++++++
>>>  include/disas/dis-asm.h |    1 +
>>>  include/exec/poison.h   |    1 +
>>>  target/mips/cpu.c       |    4 +
>>>  8 files changed, 10725 insertions(+)
>>>  create mode 100644 disas/loongson2f.cpp
>>>  create mode 100644 disas/loongson2f.h
>>>
>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>> index 3abe3faa4e..913ed2a6d3 100644
>>> --- a/MAINTAINERS
>>> +++ b/MAINTAINERS
>>> @@ -219,6 +219,7 @@ S: Maintained
>>>  F: target/mips/
>>>  F: default-configs/*mips*
>>>  F: disas/*mips*
>>> +F: disas/loongson*
>>>  F: docs/system/cpu-models-mips.rst.inc
>>>  F: hw/intc/mips_gic.c
>>>  F: hw/mips/
>>> diff --git a/configure b/configure
>>> index 597e909b53..e163dac53e 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -8102,6 +8102,7 @@ for i in $ARCH $TARGET_BASE_ARCH ; do
>>>      disas_config "MIPS"
>>>      if test -n "${cxx}"; then
>>>        disas_config "NANOMIPS"
>>> +      disas_config "LOONGSON2F"
>>>      fi
>>>    ;;
>>>    moxie*)
>>> diff --git a/disas/Makefile.objs b/disas/Makefile.objs
>>> index 3c1cdce026..0d5ee1e038 100644
>>> --- a/disas/Makefile.objs
>>> +++ b/disas/Makefile.objs
>>> @@ -14,6 +14,7 @@ common-obj-$(CONFIG_I386_DIS) += i386.o
>>>  common-obj-$(CONFIG_M68K_DIS) += m68k.o
>>>  common-obj-$(CONFIG_MICROBLAZE_DIS) += microblaze.o
>>>  common-obj-$(CONFIG_MIPS_DIS) += mips.o
>>> +common-obj-$(CONFIG_LOONGSON2F_DIS) += loongson2f.o
>>>  common-obj-$(CONFIG_NANOMIPS_DIS) += nanomips.o
>>>  common-obj-$(CONFIG_NIOS2_DIS) += nios2.o
>>>  common-obj-$(CONFIG_MOXIE_DIS) += moxie.o
>>> diff --git a/disas/loongson2f.cpp b/disas/loongson2f.cpp
>>> new file mode 100644
>>> index 0000000000..e84a2c0f09
>>> --- /dev/null
>>> +++ b/disas/loongson2f.cpp
>>> @@ -0,0 +1,8154 @@
>>> +/*
>>> + *  Source file for Loongson 2F disassembler component of QEMU
>>> + *
>>> + *  Copyright (C) 2020  Stefan Brankovic <stefan.branko...@syrmia.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/>.
>>> + *
>>> + */
>>> +
>>> +extern "C" {
>>> +#include "qemu/osdep.h"
>>> +#include "qemu/bitops.h"
>>> +#include "disas/dis-asm.h"
>>> +}
>>> +
>>> +#include "loongson2f.h"
>>> +
>>> +int print_insn_loongson2f(bfd_vma addr, disassemble_info *info)
>>> +{
>>> +    bfd_byte buffer[4];
>>> +    uint32_t insn32;
>>> +    int status;
>>> +    Decoder *decoder = new Decoder();
>>> +
>>> +    status = info->read_memory_func(addr, buffer, 4, info);
>>> +    if (status != 0) {
>>> +        info->memory_error_func(status, addr, info);
>>> +        return -1;
>>> +    }
>>> +    if (info->endian == BFD_ENDIAN_BIG) {
>>> +        insn32 = bfd_getb32(buffer);
>>> +    } else {
>>> +        insn32 = bfd_getl32(buffer);
>>> +    }
>>> +
>>> +    status = decoder->decode32(info, insn32);
>>> +
>>> +    delete decoder;
>>> +
>>> +    return status == 0 ? -1 : 4;
>>> +}
>>> +
>>> +int Fields32RdRsRt::getRd()
>>> +{
>>> +    return this->rd;
>>> +}
>>> +
>>> +int Fields32RdRsRt::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32RdRsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32ImmRsRt::getImm()
>>> +{
>>> +    return this->imm;
>>> +}
>>> +
>>> +int Fields32ImmRsRt::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32ImmRsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32RdRs::getRd()
>>> +{
>>> +    return this->rd;
>>> +}
>>> +
>>> +int Fields32RdRs::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32Rs::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32BaseOffsetRt::getBase()
>>> +{
>>> +    return this->base;
>>> +}
>>> +
>>> +int Fields32BaseOffsetRt::getOffset()
>>> +{
>>> +    return this->offset;
>>> +}
>>> +
>>> +int Fields32BaseOffsetRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32ImmRt::getImm()
>>> +{
>>> +    return this->imm;
>>> +}
>>> +
>>> +int Fields32ImmRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32Rd::getRd()
>>> +{
>>> +    return this->rd;
>>> +}
>>> +
>>> +int Fields32Stype::getStype()
>>> +{
>>> +    return this->stype;
>>> +}
>>> +
>>> +int Fields32CodeRsRt::getCode()
>>> +{
>>> +    return this->code;
>>> +}
>>> +
>>> +int Fields32CodeRsRt::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32CodeRsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32ImmRs::getImm()
>>> +{
>>> +    return this->imm;
>>> +}
>>> +
>>> +int Fields32ImmRs::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32FdFs::getFd()
>>> +{
>>> +    return this->fd;
>>> +}
>>> +
>>> +int Fields32FdFs::getFs()
>>> +{
>>> +    return this->fs;
>>> +}
>>> +
>>> +int Fields32FdFsFt::getFd()
>>> +{
>>> +    return this->fd;
>>> +}
>>> +
>>> +int Fields32FdFsFt::getFs()
>>> +{
>>> +    return this->fs;
>>> +}
>>> +
>>> +int Fields32FdFsFt::getFt()
>>> +{
>>> +    return this->ft;
>>> +}
>>> +
>>> +int Fields32Offset::getOffset()
>>> +{
>>> +    return this->offset;
>>> +}
>>> +
>>> +int Fields32FsFt::getFs()
>>> +{
>>> +    return this->fs;
>>> +}
>>> +
>>> +int Fields32FsFt::getFt()
>>> +{
>>> +    return this->ft;
>>> +}
>>> +
>>> +int Fields32FsRt::getFs()
>>> +{
>>> +    return this->fs;
>>> +}
>>> +
>>> +int Fields32FsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32BaseFtOffset::getBase()
>>> +{
>>> +    return this->base;
>>> +}
>>> +
>>> +int Fields32BaseFtOffset::getFt()
>>> +{
>>> +    return this->ft;
>>> +}
>>> +
>>> +int Fields32BaseFtOffset::getOffset()
>>> +{
>>> +    return this->offset;
>>> +}
>>> +
>>> +int Fields32OffsetRsRt::getOffset()
>>> +{
>>> +    return this->offset;
>>> +}
>>> +
>>> +int Fields32OffsetRsRt::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32OffsetRsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32OffsetRs::getOffset()
>>> +{
>>> +    return this->offset;
>>> +}
>>> +
>>> +int Fields32OffsetRs::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32Code::getCode()
>>> +{
>>> +    return this->code;
>>> +}
>>> +
>>> +int Fields32Cop_fun::getCop_fun()
>>> +{
>>> +    return this->cop_fun;
>>> +}
>>> +
>>> +int Fields32RsRt::getRs()
>>> +{
>>> +    return this->rs;
>>> +}
>>> +
>>> +int Fields32RsRt::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32RdRtSa::getRd()
>>> +{
>>> +    return this->rd;
>>> +}
>>> +
>>> +int Fields32RdRtSa::getRt()
>>> +{
>>> +    return this->rt;
>>> +}
>>> +
>>> +int Fields32RdRtSa::getSa()
>>> +{
>>> +    return this->sa;
>>> +}
>>> +
>>> +int Fields32Instr_index::getInstr_index()
>>> +{
>>> +    return this->instr_index;
>>> +}
>>> +
>>> +void Fields32RdRsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->rd = extract32(insn, 11, 5);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32ImmRsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->imm = sextract32(insn, 0, 16);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32RdRsD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rd = extract32(insn, 11, 5);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32RsD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32BaseOffsetRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->base = extract32(insn, 21, 5);
>>> +    this->offset = sextract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32ImmRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->imm = extract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32RdD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rd = extract32(insn, 11, 5);
>>> +}
>>> +
>>> +void Fields32StypeD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->stype = extract32(insn, 6, 5);
>>> +}
>>> +
>>> +void Fields32CodeRsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->code = extract32(insn, 6, 10);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32ImmRsD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->imm = sextract32(insn, 0, 16);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32FdFsD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->fs = extract32(insn, 11, 5);
>>> +    this->fd = extract32(insn, 6, 5);
>>> +}
>>> +
>>> +void Fields32FdFsFtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->ft = extract32(insn, 16, 5);
>>> +    this->fs = extract32(insn, 11, 5);
>>> +    this->fd = extract32(insn, 6, 5);
>>> +}
>>> +
>>> +void Fields32ImmRsRtD1::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->imm = extract32(insn, 0, 16);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32OffsetD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->offset = sextract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32FsFtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->fs = extract32(insn, 11, 5);
>>> +    this->ft = extract32(insn, 16, 5);
>>> +}
>>> +
>>> +void Fields32FsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->fs = extract32(insn, 11, 5);
>>> +}
>>> +
>>> +void Fields32BaseFtOffsetD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->base = extract32(insn, 21, 5);
>>> +    this->ft = extract32(insn, 16, 5);
>>> +    this->offset = sextract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32OffsetRsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +    this->offset = sextract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32OffsetRsD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rs = extract32(insn, 21, 5);
>>> +    this->offset = sextract32(insn, 0, 16);
>>> +}
>>> +
>>> +void Fields32CodeD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->code = extract32(insn, 6, 20);
>>> +}
>>> +
>>> +void Fields32Cop_funD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->cop_fun = extract32(insn, 0, 26);
>>> +}
>>> +
>>> +void Fields32RsRtD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->rs = extract32(insn, 21, 5);
>>> +}
>>> +
>>> +void Fields32RdRtSaD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->rt = extract32(insn, 16, 5);
>>> +    this->rd = extract32(insn, 11, 5);
>>> +    this->sa = extract32(insn, 6, 5);
>>> +}
>>> +
>>> +void Fields32Instr_indexD0::decode_fields32(uint32_t insn)
>>> +{
>>> +    this->instr_index = extract32(insn, 0, 26);
>>> +}
>>> +
>>> +void Instruction32::getAlias(char *buffer, int regNo)
>>> +{
>>> +    switch (regNo) {
>>> +    case 0:
>>> +        strncpy(buffer, "zero", 5);
>>> +        break;
>>> +    case 1:
>>> +        strncpy(buffer, "at", 5);
>>> +        break;
>>> +    case 2:
>>> +    case 3:
>>> +        sprintf(buffer, "v%d", regNo - 2);
>>> +        break;
>>> +    case 4:
>>> +    case 5:
>>> +    case 6:
>>> +    case 7:
>>> +    case 8:
>>> +    case 9:
>>> +    case 10:
>>> +    case 11:
>>> +        sprintf(buffer, "a%d", regNo - 4);
>>> +        break;
>>> +    case 12:
>>> +    case 13:
>>> +    case 14:
>>> +    case 15:
>>> +        sprintf(buffer, "t%d", regNo - 12);
>>> +        break;
>>> +    case 16:
>>> +    case 17:
>>> +    case 18:
>>> +    case 19:
>>> +    case 20:
>>> +    case 21:
>>> +    case 22:
>>> +    case 23:
>>> +        sprintf(buffer, "s%d", regNo - 16);
>>> +        break;
>>> +    case 24:
>>> +    case 25:
>>> +        sprintf(buffer, "t%d", regNo - 16);
>>> +        break;
>>> +    case 28:
>>> +        strncpy(buffer, "gp", 5);
>>> +        break;
>>> +    case 29:
>>> +        strncpy(buffer, "sp", 5);
>>> +        break;
>>> +    case 30:
>>> +        strncpy(buffer, "s8", 5);
>>> +        break;
>>> +    case 31:
>>> +        strncpy(buffer, "ra", 5);
>>> +        break;
>>> +    default:
>>> +        sprintf(buffer, "r%d", regNo);
>>> +        break;
>>> +    }
>>> +}
>>> +
>>> +Instruction32::~Instruction32() {}
>>> +
>>> +ADD::ADD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ADD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "ADD",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +ADDI::ADDI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ADDI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "ADDI",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +ADDIU::ADDIU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ADDIU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "ADDIU",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +ADDU::ADDU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ADDU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "ADDU",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +AND::AND(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool AND::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "AND",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +ANDI::ANDI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD1();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ANDI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "ANDI",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +BEQ::BEQ(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BEQ::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32OffsetRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32OffsetRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "BEQ",
>>> +     alias1, alias2, ((Fields32OffsetRsRt *)this->fields32)->getOffset()
>>> ));
>>> +    return true;
>>> +}
>>> +
>>> +BEQL::BEQL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BEQL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32OffsetRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32OffsetRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "BEQL",
>>> +     alias1, alias2, ((Fields32OffsetRsRt *)this->fields32)->getOffset()
>>> ));
>>> +    return true;
>>> +}
>>> +
>>> +BGEZ::BGEZ(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGEZ::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGEZ",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BGEZAL::BGEZAL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGEZAL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGEZAL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BGEZALL::BGEZALL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGEZALL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGEZALL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BGEZL::BGEZL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGEZL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGEZL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BGTZ::BGTZ(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGTZ::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGTZ",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BGTZL::BGTZL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BGTZL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BGTZL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLEZ::BLEZ(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLEZ::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLEZ",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLEZL::BLEZL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLEZL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLEZL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLTZ::BLTZ(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLTZ::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLTZ",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLTZAL::BLTZAL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLTZAL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLTZAL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLTZALL::BLTZALL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLTZALL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLTZALL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BLTZL::BLTZL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BLTZL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32OffsetRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "BLTZL",
>>> +     alias1, ((Fields32OffsetRs *)this->fields32)->getOffset()));
>>> +    return true;
>>> +}
>>> +
>>> +BNE::BNE(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BNE::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32OffsetRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32OffsetRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "BNE",
>>> +     alias1, alias2, ((Fields32OffsetRsRt *)this->fields32)->getOffset()
>>> ));
>>> +    return true;
>>> +}
>>> +
>>> +BNEL::BNEL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32OffsetRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BNEL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32OffsetRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32OffsetRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "BNEL",
>>> +     alias1, alias2, ((Fields32OffsetRsRt *)this->fields32)->getOffset()
>>> ));
>>> +    return true;
>>> +}
>>> +
>>> +BREAK::BREAK(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32CodeD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool BREAK::disas_output(disassemble_info *info)
>>> +{
>>> +    (info->fprintf_func(info->stream, "%-9s" " %d", "" "BREAK",
>>> +     ((Fields32Code *)this->fields32)->getCode()));
>>> +    return true;
>>> +}
>>> +
>>> +COP0::COP0(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32Cop_funD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool COP0::disas_output(disassemble_info *info)
>>> +{
>>> +    (info->fprintf_func(info->stream, "%-9s" " %d", "" "COP0",
>>> +     ((Fields32Cop_fun *)this->fields32)->getCop_fun()));
>>> +    return true;
>>> +}
>>> +
>>> +COP3::COP3(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32Cop_funD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool COP3::disas_output(disassemble_info *info)
>>> +{
>>> +    (info->fprintf_func(info->stream, "%-9s" " %d", "" "COP3",
>>> +     ((Fields32Cop_fun *)this->fields32)->getCop_fun()));
>>> +    return true;
>>> +}
>>> +
>>> +DADD::DADD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DADD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DADD",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DADDI::DADDI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DADDI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "DADDI",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +DADDIU::DADDIU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DADDIU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", ""
>>> "DADDIU",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +DADDU::DADDU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DADDU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DADDU",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DDIV::DDIV(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DDIV::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DDIV",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DDIVU::DDIVU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DDIVU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DDIVU",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DIV::DIV(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DIV::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DIV",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DIVU::DIVU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DIVU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DIVU",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DMULT::DMULT(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DMULT::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DMULT",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DMULTU::DMULTU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DMULTU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "DMULTU",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +DSLL::DSLL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSLL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "DSLL",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSLL32::DSLL32(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSLL32::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", ""
>>> "DSLL32",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSLLV::DSLLV(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSLLV::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DSLLV",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DSRA::DSRA(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRA::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "DSRA",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSRA32::DSRA32(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRA32::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", ""
>>> "DSRA32",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSRAV::DSRAV(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRAV::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DSRAV",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DSRL::DSRL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "DSRL",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSRL32::DSRL32(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRtSaD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRL32::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRtSa *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRtSa *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", ""
>>> "DSRL32",
>>> +     alias1, alias2, ((Fields32RdRtSa *)this->fields32)->getSa()));
>>> +    return true;
>>> +}
>>> +
>>> +DSRLV::DSRLV(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSRLV::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DSRLV",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DSUB::DSUB(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSUB::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DSUB",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +DSUBU::DSUBU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool DSUBU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "DSUBU",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +J::J(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32Instr_indexD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool J::disas_output(disassemble_info *info)
>>> +{
>>> +    (info->fprintf_func(info->stream, "%-9s" " %d", "" "J",
>>> +     ((Fields32Instr_index *)this->fields32)->getInstr_index()));
>>> +    return true;
>>> +}
>>> +
>>> +JAL::JAL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32Instr_indexD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool JAL::disas_output(disassemble_info *info)
>>> +{
>>> +    (info->fprintf_func(info->stream, "%-9s" " %d", "" "JAL",
>>> +     ((Fields32Instr_index *)this->fields32)->getInstr_index()));
>>> +    return true;
>>> +}
>>> +
>>> +JALR::JALR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool JALR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RdRs *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "JALR",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +JR::JR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool JR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32Rs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s", "" "JR",
>>> +     alias1));
>>> +    return true;
>>> +}
>>> +
>>> +LB::LB(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LB::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LB",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LBU::LBU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LBU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LBU",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LD::LD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LD",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LDC2::LDC2(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LDC2::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LDC2",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LDL::LDL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LDL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LDL",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LDR::LDR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LDR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LDR",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LH::LH(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LH::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LH",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LHU::LHU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LHU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LHU",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LL::LL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LL",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LLD::LLD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LLD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LLD",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LUI::LUI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LUI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32ImmRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d", "" "LUI",
>>> +     alias1, ((Fields32ImmRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +LW::LW(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LW::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LW",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LWC2::LWC2(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LWC2::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LWC2",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LWC3::LWC3(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LWC3::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LWC3",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LWL::LWL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LWL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LWL",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LWR::LWR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LWR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LWR",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +LWU::LWU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool LWU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "LWU",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +MFHI::MFHI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MFHI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32Rd *)this->fields32)->getRd());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s", "" "MFHI",
>>> +     alias1));
>>> +    return true;
>>> +}
>>> +
>>> +MFLO::MFLO(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MFLO::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32Rd *)this->fields32)->getRd());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s", "" "MFLO",
>>> +     alias1));
>>> +    return true;
>>> +}
>>> +
>>> +MTHI::MTHI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MTHI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32Rs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s", "" "MTHI",
>>> +     alias1));
>>> +    return true;
>>> +}
>>> +
>>> +MTLO::MTLO(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MTLO::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    getAlias(alias1, ((Fields32Rs *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s", "" "MTLO",
>>> +     alias1));
>>> +    return true;
>>> +}
>>> +
>>> +MULT::MULT(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MULT::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "MULT",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +MULTU::MULTU(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool MULTU::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32RsRt *)this->fields32)->getRs());
>>> +    getAlias(alias2, ((Fields32RsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s", "" "MULTU",
>>> +     alias1, alias2));
>>> +    return true;
>>> +}
>>> +
>>> +NOR::NOR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool NOR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "NOR",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +OR::OR(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32RdRsRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool OR::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    char alias3[5];
>>> +    getAlias(alias1, ((Fields32RdRsRt *)this->fields32)->getRd());
>>> +    getAlias(alias2, ((Fields32RdRsRt *)this->fields32)->getRs());
>>> +    getAlias(alias3, ((Fields32RdRsRt *)this->fields32)->getRt());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %s", "" "OR",
>>> +     alias1, alias2, alias3));
>>> +    return true;
>>> +}
>>> +
>>> +ORI::ORI(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32ImmRsRtD1();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool ORI::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32ImmRsRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32ImmRsRt *)this->fields32)->getRs());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %s, %d", "" "ORI",
>>> +     alias1, alias2, ((Fields32ImmRsRt *)this->fields32)->getImm()));
>>> +    return true;
>>> +}
>>> +
>>> +SB::SB(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SB::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "SB",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +SC::SC(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SC::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "SC",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +SCD::SCD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SCD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "SCD",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +SD::SD(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SD::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "SD",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +SDC2::SDC2(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SDC2::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s" " %s, %d(%s)", "" "SDC2",
>>> +     alias1, ((Fields32BaseOffsetRt *)this->fields32)->getOffset(),
>>> alias2));
>>> +    return true;
>>> +}
>>> +
>>> +SDL::SDL(uint32_t insn)
>>> +{
>>> +    this->fields32 = new Fields32BaseOffsetRtD0();
>>> +    this->fields32->decode_fields32(insn);
>>> +}
>>> +
>>> +bool SDL::disas_output(disassemble_info *info)
>>> +{
>>> +    char alias1[5];
>>> +    char alias2[5];
>>> +    getAlias(alias1, ((Fields32BaseOffsetRt *)this->fields32)->getRt());
>>> +    getAlias(alias2, ((Fields32BaseOffsetRt
>>> *)this->fields32)->getBase());
>>> +    (info->fprintf_func(info->stream, "%-9s"
>>
>>

Reply via email to