From 9c05b198660b9f7bc683ee823fbc36af1320280b Mon Sep 17 00:00:00 2001 From: angie Date: Tue, 7 Jun 2022 23:30:01 -0400 Subject: [PATCH] rename RabbitizerRegisterType to RabbitizerOperandType --- .../instructions/RabbitizerInstrDescriptor.h | 4 +- include/instructions/RabbitizerOperandType.h | 45 ++ include/instructions/RabbitizerRegisterType.h | 46 -- .../instr_id/RabbitizerInstrId_cpu.inc | 454 +++++++++--------- .../instr_id/RabbitizerInstrId_rsp.inc | 262 +++++----- .../RabbitizerInstr/RabbitizerInstr.c | 62 +-- .../RabbitizerInstr_Disassemble.c | 150 +++--- 7 files changed, 511 insertions(+), 512 deletions(-) create mode 100644 include/instructions/RabbitizerOperandType.h delete mode 100644 include/instructions/RabbitizerRegisterType.h diff --git a/include/instructions/RabbitizerInstrDescriptor.h b/include/instructions/RabbitizerInstrDescriptor.h index 35fd3d1..1b9f4d8 100644 --- a/include/instructions/RabbitizerInstrDescriptor.h +++ b/include/instructions/RabbitizerInstrDescriptor.h @@ -7,7 +7,7 @@ #include -#include "RabbitizerRegisterType.h" +#include "RabbitizerOperandType.h" #include "RabbitizerInstrId.h" typedef enum RabbitizerInstrType { @@ -20,7 +20,7 @@ typedef enum RabbitizerInstrType { } RabbitizerInstrType; typedef struct RabbitizerInstrDescriptor { - RabbitizerRegisterType operands[4]; + RabbitizerOperandType operands[4]; RabbitizerInstrType instrType; bool isBranch; diff --git a/include/instructions/RabbitizerOperandType.h b/include/instructions/RabbitizerOperandType.h new file mode 100644 index 0000000..12e7a91 --- /dev/null +++ b/include/instructions/RabbitizerOperandType.h @@ -0,0 +1,45 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_OPERAND_TYPE_H +#define RABBITIZER_OPERAND_TYPE_H +#pragma once + + +typedef enum RabbitizerOperandType { + RABBITIZER_OPERAND_TYPE_INVALID, + RABBITIZER_OPERAND_TYPE_rs, + RABBITIZER_OPERAND_TYPE_rt, + RABBITIZER_OPERAND_TYPE_rd, + RABBITIZER_OPERAND_TYPE_cop0d, + RABBITIZER_OPERAND_TYPE_fs, + RABBITIZER_OPERAND_TYPE_ft, + RABBITIZER_OPERAND_TYPE_fd, + RABBITIZER_OPERAND_TYPE_cop1cs, // Coprocessor 1 control fs + RABBITIZER_OPERAND_TYPE_cop2t, + RABBITIZER_OPERAND_TYPE_sa, + RABBITIZER_OPERAND_TYPE_op, + RABBITIZER_OPERAND_TYPE_code, + RABBITIZER_OPERAND_TYPE_LABEL, + RABBITIZER_OPERAND_TYPE_IMM, + RABBITIZER_OPERAND_TYPE_IMM_base, + + // rsp + RABBITIZER_OPERAND_TYPE_RSP_rs, + RABBITIZER_OPERAND_TYPE_RSP_rt, + RABBITIZER_OPERAND_TYPE_RSP_rd, + RABBITIZER_OPERAND_TYPE_RSP_cop0d, + RABBITIZER_OPERAND_TYPE_RSP_vs, + RABBITIZER_OPERAND_TYPE_RSP_vt, + RABBITIZER_OPERAND_TYPE_RSP_vd, + RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh, + RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, + RABBITIZER_OPERAND_TYPE_RSP_vd_vs, + RABBITIZER_OPERAND_TYPE_RSP_vd_index, + RABBITIZER_OPERAND_TYPE_RSP_offset_rs, + // rsp + + RABBITIZER_OPERAND_TYPE_MAX, +} RabbitizerOperandType; + +#endif diff --git a/include/instructions/RabbitizerRegisterType.h b/include/instructions/RabbitizerRegisterType.h deleted file mode 100644 index 5f1b83a..0000000 --- a/include/instructions/RabbitizerRegisterType.h +++ /dev/null @@ -1,46 +0,0 @@ -/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ -/* SPDX-License-Identifier: MIT */ - -#ifndef RABBITIZER_REGISTER_TYPE_H -#define RABBITIZER_REGISTER_TYPE_H -#pragma once - - -// TODO: rename to OperandType -typedef enum RabbitizerRegisterType { - RABBITIZER_REGISTER_TYPE_INVALID, - RABBITIZER_REGISTER_TYPE_rs, - RABBITIZER_REGISTER_TYPE_rt, - RABBITIZER_REGISTER_TYPE_rd, - RABBITIZER_REGISTER_TYPE_cop0d, - RABBITIZER_REGISTER_TYPE_fs, - RABBITIZER_REGISTER_TYPE_ft, - RABBITIZER_REGISTER_TYPE_fd, - RABBITIZER_REGISTER_TYPE_cop1cs, // Coprocessor 1 control fs - RABBITIZER_REGISTER_TYPE_cop2t, - RABBITIZER_REGISTER_TYPE_sa, - RABBITIZER_REGISTER_TYPE_op, - RABBITIZER_REGISTER_TYPE_code, - RABBITIZER_REGISTER_TYPE_LABEL, - RABBITIZER_REGISTER_TYPE_IMM, - RABBITIZER_REGISTER_TYPE_IMM_base, - - // rsp - RABBITIZER_REGISTER_TYPE_RSP_rs, - RABBITIZER_REGISTER_TYPE_RSP_rt, - RABBITIZER_REGISTER_TYPE_RSP_rd, - RABBITIZER_REGISTER_TYPE_RSP_cop0d, - RABBITIZER_REGISTER_TYPE_RSP_vs, - RABBITIZER_REGISTER_TYPE_RSP_vt, - RABBITIZER_REGISTER_TYPE_RSP_vd, - RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh, - RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, - RABBITIZER_REGISTER_TYPE_RSP_vd_vs, - RABBITIZER_REGISTER_TYPE_RSP_vd_index, - RABBITIZER_REGISTER_TYPE_RSP_offset_rs, - // rsp - - RABBITIZER_REGISTER_TYPE_MAX, -} RabbitizerRegisterType; - -#endif diff --git a/include/instructions/instr_id/RabbitizerInstrId_cpu.inc b/include/instructions/instr_id/RabbitizerInstrId_cpu.inc index beb1c6d..d4498c6 100644 --- a/include/instructions/instr_id/RabbitizerInstrId_cpu.inc +++ b/include/instructions/instr_id/RabbitizerInstrId_cpu.inc @@ -1,178 +1,178 @@ /* SPDX-FileCopyrightText: © 2022 Decompollaborate */ /* SPDX-License-Identifier: MIT */ - RABBITIZER_DEF_INSTR_ID(cpu, INVALID, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), + RABBITIZER_DEF_INSTR_ID(cpu, INVALID, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // OP rs - RABBITIZER_DEF_INSTR_ID(cpu, mthi, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R), // Move To HI register - RABBITIZER_DEF_INSTR_ID(cpu, mtlo, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R), // Move To LO register - RABBITIZER_DEF_INSTR_ID(cpu, jr, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true), // Jump Register - RABBITIZER_DEF_INSTR_ID(cpu, jalr, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register + RABBITIZER_DEF_INSTR_ID(cpu, mthi, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R), // Move To HI register + RABBITIZER_DEF_INSTR_ID(cpu, mtlo, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R), // Move To LO register + RABBITIZER_DEF_INSTR_ID(cpu, jr, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true), // Jump Register + RABBITIZER_DEF_INSTR_ID(cpu, jalr, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // OP rd, rs - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, jalr_rd, jalr, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // Special case for rd != 31 + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, jalr_rd, jalr, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // Special case for rd != 31 // OP rd - RABBITIZER_DEF_INSTR_ID(cpu, mfhi, .operands={RABBITIZER_REGISTER_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move From HI register - RABBITIZER_DEF_INSTR_ID(cpu, mflo, .operands={RABBITIZER_REGISTER_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move From LO register + RABBITIZER_DEF_INSTR_ID(cpu, mfhi, .operands={RABBITIZER_OPERAND_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move From HI register + RABBITIZER_DEF_INSTR_ID(cpu, mflo, .operands={RABBITIZER_OPERAND_TYPE_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move From LO register // OP rs, rt - RABBITIZER_DEF_INSTR_ID(cpu, mult, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // MULTtiply word - RABBITIZER_DEF_INSTR_ID(cpu, multu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // MULTtiply Unsigned word - RABBITIZER_DEF_INSTR_ID(cpu, dmult, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword MULTiply - RABBITIZER_DEF_INSTR_ID(cpu, dmultu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword MULTiply Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, tge, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Greater or Equal - RABBITIZER_DEF_INSTR_ID(cpu, tgeu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Greater or Equal Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, tlt, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Less Than - RABBITIZER_DEF_INSTR_ID(cpu, tltu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Less Than Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, teq, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if EQual - RABBITIZER_DEF_INSTR_ID(cpu, tne, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Not Equal + RABBITIZER_DEF_INSTR_ID(cpu, mult, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // MULTtiply word + RABBITIZER_DEF_INSTR_ID(cpu, multu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // MULTtiply Unsigned word + RABBITIZER_DEF_INSTR_ID(cpu, dmult, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword MULTiply + RABBITIZER_DEF_INSTR_ID(cpu, dmultu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword MULTiply Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, tge, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Greater or Equal + RABBITIZER_DEF_INSTR_ID(cpu, tgeu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Greater or Equal Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, tlt, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Less Than + RABBITIZER_DEF_INSTR_ID(cpu, tltu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Less Than Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, teq, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if EQual + RABBITIZER_DEF_INSTR_ID(cpu, tne, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true), // Trap if Not Equal // OP rd, rs, rt - RABBITIZER_DEF_INSTR_ID(cpu, movz, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Zero - RABBITIZER_DEF_INSTR_ID(cpu, movn, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Not zero - RABBITIZER_DEF_INSTR_ID(cpu, div, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide word - RABBITIZER_DEF_INSTR_ID(cpu, divu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide Unsigned word + RABBITIZER_DEF_INSTR_ID(cpu, movz, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Zero + RABBITIZER_DEF_INSTR_ID(cpu, movn, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Not zero + RABBITIZER_DEF_INSTR_ID(cpu, div, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide word + RABBITIZER_DEF_INSTR_ID(cpu, divu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide Unsigned word - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sn64_div, div, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide word - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sn64_divu, divu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide Unsigned word + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sn64_div, div, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide word + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sn64_divu, divu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // DIVide Unsigned word - RABBITIZER_DEF_INSTR_ID(cpu, ddiv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword DIVide - RABBITIZER_DEF_INSTR_ID(cpu, ddivu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword DIVide Unsigned - // RABBITIZER_DEF_INSTR_ID(cpu, ddiv, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), - // RABBITIZER_DEF_INSTR_ID(cpu, ddivu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), - RABBITIZER_DEF_INSTR_ID(cpu, add, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD word - RABBITIZER_DEF_INSTR_ID(cpu, addu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD Unsigned word - RABBITIZER_DEF_INSTR_ID(cpu, sub, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Subtract word - RABBITIZER_DEF_INSTR_ID(cpu, subu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // SUBtract Unsigned word - RABBITIZER_DEF_INSTR_ID(cpu, and, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // AND - RABBITIZER_DEF_INSTR_ID(cpu, or, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // OR - RABBITIZER_DEF_INSTR_ID(cpu, xor, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // eXclusive OR - RABBITIZER_DEF_INSTR_ID(cpu, nor, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not OR - RABBITIZER_DEF_INSTR_ID(cpu, slt, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than - RABBITIZER_DEF_INSTR_ID(cpu, sltu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, dadd, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Add - RABBITIZER_DEF_INSTR_ID(cpu, daddu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Add Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, dsub, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword SUBtract - RABBITIZER_DEF_INSTR_ID(cpu, dsubu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword SUBtract Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, ddiv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword DIVide + RABBITIZER_DEF_INSTR_ID(cpu, ddivu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), // Doubleword DIVide Unsigned + // RABBITIZER_DEF_INSTR_ID(cpu, ddiv, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), + // RABBITIZER_DEF_INSTR_ID(cpu, ddivu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R), + RABBITIZER_DEF_INSTR_ID(cpu, add, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD word + RABBITIZER_DEF_INSTR_ID(cpu, addu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD Unsigned word + RABBITIZER_DEF_INSTR_ID(cpu, sub, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Subtract word + RABBITIZER_DEF_INSTR_ID(cpu, subu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // SUBtract Unsigned word + RABBITIZER_DEF_INSTR_ID(cpu, and, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // AND + RABBITIZER_DEF_INSTR_ID(cpu, or, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // OR + RABBITIZER_DEF_INSTR_ID(cpu, xor, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // eXclusive OR + RABBITIZER_DEF_INSTR_ID(cpu, nor, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not OR + RABBITIZER_DEF_INSTR_ID(cpu, slt, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than + RABBITIZER_DEF_INSTR_ID(cpu, sltu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, dadd, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Add + RABBITIZER_DEF_INSTR_ID(cpu, daddu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Add Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, dsub, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword SUBtract + RABBITIZER_DEF_INSTR_ID(cpu, dsubu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword SUBtract Unsigned // OP code - RABBITIZER_DEF_INSTR_ID(cpu, syscall, .operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // SYStem CALL - RABBITIZER_DEF_INSTR_ID(cpu, break, .operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Break - RABBITIZER_DEF_INSTR_ID(cpu, sync, .operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Sync + RABBITIZER_DEF_INSTR_ID(cpu, syscall, .operands={RABBITIZER_OPERAND_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // SYStem CALL + RABBITIZER_DEF_INSTR_ID(cpu, break, .operands={RABBITIZER_OPERAND_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Break + RABBITIZER_DEF_INSTR_ID(cpu, sync, .operands={RABBITIZER_OPERAND_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Sync // OP rd, rt, rs - RABBITIZER_DEF_INSTR_ID(cpu, dsllv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical Variable - RABBITIZER_DEF_INSTR_ID(cpu, dsrlv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical Variable - RABBITIZER_DEF_INSTR_ID(cpu, dsrav, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic Variable - RABBITIZER_DEF_INSTR_ID(cpu, sllv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical Variable - RABBITIZER_DEF_INSTR_ID(cpu, srlv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical Variable - RABBITIZER_DEF_INSTR_ID(cpu, srav, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic Variable + RABBITIZER_DEF_INSTR_ID(cpu, dsllv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical Variable + RABBITIZER_DEF_INSTR_ID(cpu, dsrlv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical Variable + RABBITIZER_DEF_INSTR_ID(cpu, dsrav, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic Variable + RABBITIZER_DEF_INSTR_ID(cpu, sllv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical Variable + RABBITIZER_DEF_INSTR_ID(cpu, srlv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical Variable + RABBITIZER_DEF_INSTR_ID(cpu, srav, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic Variable // OP rd, rt, sa - RABBITIZER_DEF_INSTR_ID(cpu, sll, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical - RABBITIZER_DEF_INSTR_ID(cpu, srl, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical - RABBITIZER_DEF_INSTR_ID(cpu, sra, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic - RABBITIZER_DEF_INSTR_ID(cpu, dsll, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical - RABBITIZER_DEF_INSTR_ID(cpu, dsrl, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical - RABBITIZER_DEF_INSTR_ID(cpu, dsra, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic - RABBITIZER_DEF_INSTR_ID(cpu, dsll32, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical plus 32 - RABBITIZER_DEF_INSTR_ID(cpu, dsrl32, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical plus 32 - RABBITIZER_DEF_INSTR_ID(cpu, dsra32, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic plus 32 + RABBITIZER_DEF_INSTR_ID(cpu, sll, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical + RABBITIZER_DEF_INSTR_ID(cpu, srl, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical + RABBITIZER_DEF_INSTR_ID(cpu, sra, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic + RABBITIZER_DEF_INSTR_ID(cpu, dsll, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical + RABBITIZER_DEF_INSTR_ID(cpu, dsrl, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical + RABBITIZER_DEF_INSTR_ID(cpu, dsra, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic + RABBITIZER_DEF_INSTR_ID(cpu, dsll32, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Left Logical plus 32 + RABBITIZER_DEF_INSTR_ID(cpu, dsrl32, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Logical plus 32 + RABBITIZER_DEF_INSTR_ID(cpu, dsra32, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Doubleword Shift Right Arithmetic plus 32 // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(cpu, bltz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less Than Zero - RABBITIZER_DEF_INSTR_ID(cpu, bgez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater than or Equal to Zero - RABBITIZER_DEF_INSTR_ID(cpu, bltzl, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Less Than Zero Likely - RABBITIZER_DEF_INSTR_ID(cpu, bgezl, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Greater than or Equal to Zero Likely - RABBITIZER_DEF_INSTR_ID(cpu, tgei, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), - RABBITIZER_DEF_INSTR_ID(cpu, tgeiu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), - RABBITIZER_DEF_INSTR_ID(cpu, tlti, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), - RABBITIZER_DEF_INSTR_ID(cpu, tltiu, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), - RABBITIZER_DEF_INSTR_ID(cpu, bltzal, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), - RABBITIZER_DEF_INSTR_ID(cpu, bgezal, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), - RABBITIZER_DEF_INSTR_ID(cpu, bltzall, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), - RABBITIZER_DEF_INSTR_ID(cpu, bgezall, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), - RABBITIZER_DEF_INSTR_ID(cpu, teqi, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), - RABBITIZER_DEF_INSTR_ID(cpu, tnei, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, bltz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less Than Zero + RABBITIZER_DEF_INSTR_ID(cpu, bgez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater than or Equal to Zero + RABBITIZER_DEF_INSTR_ID(cpu, bltzl, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Less Than Zero Likely + RABBITIZER_DEF_INSTR_ID(cpu, bgezl, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Greater than or Equal to Zero Likely + RABBITIZER_DEF_INSTR_ID(cpu, tgei, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, tgeiu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, tlti, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, tltiu, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, bltzal, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(cpu, bgezal, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(cpu, bltzall, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), + RABBITIZER_DEF_INSTR_ID(cpu, bgezall, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), + RABBITIZER_DEF_INSTR_ID(cpu, teqi, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), + RABBITIZER_DEF_INSTR_ID(cpu, tnei, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true), // OP LABEL - RABBITIZER_DEF_INSTR_ID(cpu, j, .operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump - RABBITIZER_DEF_INSTR_ID(cpu, jal, .operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump And Link + RABBITIZER_DEF_INSTR_ID(cpu, j, .operands={RABBITIZER_OPERAND_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump + RABBITIZER_DEF_INSTR_ID(cpu, jal, .operands={RABBITIZER_OPERAND_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump And Link // OP rs, rt, IMM - RABBITIZER_DEF_INSTR_ID(cpu, beq, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual - RABBITIZER_DEF_INSTR_ID(cpu, bne, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal - RABBITIZER_DEF_INSTR_ID(cpu, beql, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on EQual Likely - RABBITIZER_DEF_INSTR_ID(cpu, bnel, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Not Equal Likely + RABBITIZER_DEF_INSTR_ID(cpu, beq, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual + RABBITIZER_DEF_INSTR_ID(cpu, bne, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal + RABBITIZER_DEF_INSTR_ID(cpu, beql, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on EQual Likely + RABBITIZER_DEF_INSTR_ID(cpu, bnel, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Not Equal Likely // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(cpu, blez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less than or Equal to Zero - RABBITIZER_DEF_INSTR_ID(cpu, bgtz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater Than Zero - RABBITIZER_DEF_INSTR_ID(cpu, blezl, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Less than or Equal to Zero Likely - RABBITIZER_DEF_INSTR_ID(cpu, bgtzl, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Greater Than Zero Likely + RABBITIZER_DEF_INSTR_ID(cpu, blez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less than or Equal to Zero + RABBITIZER_DEF_INSTR_ID(cpu, bgtz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater Than Zero + RABBITIZER_DEF_INSTR_ID(cpu, blezl, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Less than or Equal to Zero Likely + RABBITIZER_DEF_INSTR_ID(cpu, bgtzl, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true), // Branch on Greater Than Zero Likely // OP rt, IMM - RABBITIZER_DEF_INSTR_ID(cpu, lui, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Load Upper Immediate + RABBITIZER_DEF_INSTR_ID(cpu, lui, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Load Upper Immediate // OP rt, rs, IMM - RABBITIZER_DEF_INSTR_ID(cpu, andi, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // And Immediate - RABBITIZER_DEF_INSTR_ID(cpu, ori, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Or Immediate - RABBITIZER_DEF_INSTR_ID(cpu, xori, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // eXclusive OR Immediate - RABBITIZER_DEF_INSTR_ID(cpu, addi, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate - RABBITIZER_DEF_INSTR_ID(cpu, addiu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate Unsigned Word - RABBITIZER_DEF_INSTR_ID(cpu, daddi, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Doubleword add Immediate - RABBITIZER_DEF_INSTR_ID(cpu, daddiu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Doubleword add Immediate Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, slti, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate - RABBITIZER_DEF_INSTR_ID(cpu, sltiu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, andi, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // And Immediate + RABBITIZER_DEF_INSTR_ID(cpu, ori, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Or Immediate + RABBITIZER_DEF_INSTR_ID(cpu, xori, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // eXclusive OR Immediate + RABBITIZER_DEF_INSTR_ID(cpu, addi, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate + RABBITIZER_DEF_INSTR_ID(cpu, addiu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate Unsigned Word + RABBITIZER_DEF_INSTR_ID(cpu, daddi, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Doubleword add Immediate + RABBITIZER_DEF_INSTR_ID(cpu, daddiu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Doubleword add Immediate Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, slti, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate + RABBITIZER_DEF_INSTR_ID(cpu, sltiu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate Unsigned // OP rt, IMM(base) - RABBITIZER_DEF_INSTR_ID(cpu, ldl, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword Left - RABBITIZER_DEF_INSTR_ID(cpu, ldr, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword Right - RABBITIZER_DEF_INSTR_ID(cpu, lb, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte - RABBITIZER_DEF_INSTR_ID(cpu, lh, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword - RABBITIZER_DEF_INSTR_ID(cpu, lwl, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Left - RABBITIZER_DEF_INSTR_ID(cpu, lw, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word - RABBITIZER_DEF_INSTR_ID(cpu, lbu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte Insigned - RABBITIZER_DEF_INSTR_ID(cpu, lhu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, lwr, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Right - RABBITIZER_DEF_INSTR_ID(cpu, lwu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Unsigned - RABBITIZER_DEF_INSTR_ID(cpu, sb, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Byte - RABBITIZER_DEF_INSTR_ID(cpu, sh, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Halfword - RABBITIZER_DEF_INSTR_ID(cpu, swl, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word Left - RABBITIZER_DEF_INSTR_ID(cpu, sw, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word - RABBITIZER_DEF_INSTR_ID(cpu, sdl, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword Left - RABBITIZER_DEF_INSTR_ID(cpu, sdr, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword Right - RABBITIZER_DEF_INSTR_ID(cpu, swr, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word Right - RABBITIZER_DEF_INSTR_ID(cpu, ll, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Linked word - RABBITIZER_DEF_INSTR_ID(cpu, pref, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Prefetch - RABBITIZER_DEF_INSTR_ID(cpu, lld, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Linked Doubleword - RABBITIZER_DEF_INSTR_ID(cpu, ld, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword - RABBITIZER_DEF_INSTR_ID(cpu, sc, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Conditional word - RABBITIZER_DEF_INSTR_ID(cpu, scd, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Conditional Doubleword - RABBITIZER_DEF_INSTR_ID(cpu, sd, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Doubleword + RABBITIZER_DEF_INSTR_ID(cpu, ldl, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword Left + RABBITIZER_DEF_INSTR_ID(cpu, ldr, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword Right + RABBITIZER_DEF_INSTR_ID(cpu, lb, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte + RABBITIZER_DEF_INSTR_ID(cpu, lh, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword + RABBITIZER_DEF_INSTR_ID(cpu, lwl, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Left + RABBITIZER_DEF_INSTR_ID(cpu, lw, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word + RABBITIZER_DEF_INSTR_ID(cpu, lbu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte Insigned + RABBITIZER_DEF_INSTR_ID(cpu, lhu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, lwr, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Right + RABBITIZER_DEF_INSTR_ID(cpu, lwu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word Unsigned + RABBITIZER_DEF_INSTR_ID(cpu, sb, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Byte + RABBITIZER_DEF_INSTR_ID(cpu, sh, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Halfword + RABBITIZER_DEF_INSTR_ID(cpu, swl, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word Left + RABBITIZER_DEF_INSTR_ID(cpu, sw, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word + RABBITIZER_DEF_INSTR_ID(cpu, sdl, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword Left + RABBITIZER_DEF_INSTR_ID(cpu, sdr, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword Right + RABBITIZER_DEF_INSTR_ID(cpu, swr, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word Right + RABBITIZER_DEF_INSTR_ID(cpu, ll, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Linked word + RABBITIZER_DEF_INSTR_ID(cpu, pref, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Prefetch + RABBITIZER_DEF_INSTR_ID(cpu, lld, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Linked Doubleword + RABBITIZER_DEF_INSTR_ID(cpu, ld, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Doubleword + RABBITIZER_DEF_INSTR_ID(cpu, sc, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Conditional word + RABBITIZER_DEF_INSTR_ID(cpu, scd, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Conditional Doubleword + RABBITIZER_DEF_INSTR_ID(cpu, sd, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Store Doubleword - RABBITIZER_DEF_INSTR_ID(cpu, cache, .operands={RABBITIZER_REGISTER_TYPE_op, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Cache + RABBITIZER_DEF_INSTR_ID(cpu, cache, .operands={RABBITIZER_OPERAND_TYPE_op, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Cache // OP ft, IMM(base) - RABBITIZER_DEF_INSTR_ID(cpu, lwc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Load Word to Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, ldc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true), // Load Doubleword to Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, swc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Store Word from Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, sdc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true), // Store Doubleword from Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, lwc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Load Word to Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, ldc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true), // Load Doubleword to Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, swc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Store Word from Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, sdc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true), // Store Doubleword from Coprocessor z // OP cop2t, IMM(base) - RABBITIZER_DEF_INSTR_ID(cpu, lwc2, .operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Load Word to Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, ldc2, .operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Load Doubleword to Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, swc2, .operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word from Coprocessor z - RABBITIZER_DEF_INSTR_ID(cpu, sdc2, .operands={RABBITIZER_REGISTER_TYPE_cop2t, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword from Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, lwc2, .operands={RABBITIZER_OPERAND_TYPE_cop2t, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Load Word to Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, ldc2, .operands={RABBITIZER_OPERAND_TYPE_cop2t, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Load Doubleword to Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, swc2, .operands={RABBITIZER_OPERAND_TYPE_cop2t, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word from Coprocessor z + RABBITIZER_DEF_INSTR_ID(cpu, sdc2, .operands={RABBITIZER_OPERAND_TYPE_cop2t, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Doubleword from Coprocessor z // OP rt, cop0d - RABBITIZER_DEF_INSTR_ID(cpu, mfc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move word From CP0 - RABBITIZER_DEF_INSTR_ID(cpu, dmfc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Doubleword Move From CP0 - RABBITIZER_DEF_INSTR_ID(cpu, cfc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move control word From CP0 - RABBITIZER_DEF_INSTR_ID(cpu, mtc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move word to CP0 - RABBITIZER_DEF_INSTR_ID(cpu, dmtc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Doubleword Move To CP0 - RABBITIZER_DEF_INSTR_ID(cpu, ctc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move control word To CP0 + RABBITIZER_DEF_INSTR_ID(cpu, mfc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move word From CP0 + RABBITIZER_DEF_INSTR_ID(cpu, dmfc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Doubleword Move From CP0 + RABBITIZER_DEF_INSTR_ID(cpu, cfc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move control word From CP0 + RABBITIZER_DEF_INSTR_ID(cpu, mtc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move word to CP0 + RABBITIZER_DEF_INSTR_ID(cpu, dmtc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Doubleword Move To CP0 + RABBITIZER_DEF_INSTR_ID(cpu, ctc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move control word To CP0 // OP RABBITIZER_DEF_INSTR_ID(cpu, tlbr, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Read Indexed TLB Entry @@ -182,123 +182,123 @@ RABBITIZER_DEF_INSTR_ID(cpu, eret, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Return from Exception // OP IMM - RABBITIZER_DEF_INSTR_ID(cpu, bc0t, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), // Branch on FP True - RABBITIZER_DEF_INSTR_ID(cpu, bc0f, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), // Branch on FP False - RABBITIZER_DEF_INSTR_ID(cpu, bc0tl, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), // Branch on FP True Likely - RABBITIZER_DEF_INSTR_ID(cpu, bc0fl, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), // Branch on FP False Likely + RABBITIZER_DEF_INSTR_ID(cpu, bc0t, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), // Branch on FP True + RABBITIZER_DEF_INSTR_ID(cpu, bc0f, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), // Branch on FP False + RABBITIZER_DEF_INSTR_ID(cpu, bc0tl, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), // Branch on FP True Likely + RABBITIZER_DEF_INSTR_ID(cpu, bc0fl, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), // Branch on FP False Likely // OP rt, fs - RABBITIZER_DEF_INSTR_ID(cpu, mfc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Move Word From Floating-Point - RABBITIZER_DEF_INSTR_ID(cpu, dmfc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Doubleword Move From Floating-Point - RABBITIZER_DEF_INSTR_ID(cpu, mtc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Move Word to Floating-Point - RABBITIZER_DEF_INSTR_ID(cpu, dmtc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Doubleword Move To Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, mfc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Move Word From Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, dmfc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Doubleword Move From Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, mtc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Move Word to Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, dmtc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Doubleword Move To Floating-Point // OP rt, cop1cs - RABBITIZER_DEF_INSTR_ID(cpu, cfc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Move Control Word from Floating-Point - RABBITIZER_DEF_INSTR_ID(cpu, ctc1, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Move Control Word to Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, cfc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true), // Move Control Word from Floating-Point + RABBITIZER_DEF_INSTR_ID(cpu, ctc1, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Move Control Word to Floating-Point // OP IMM - RABBITIZER_DEF_INSTR_ID(cpu, bc1f, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), - RABBITIZER_DEF_INSTR_ID(cpu, bc1t, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), - RABBITIZER_DEF_INSTR_ID(cpu, bc1fl, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), - RABBITIZER_DEF_INSTR_ID(cpu, bc1tl, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), + RABBITIZER_DEF_INSTR_ID(cpu, bc1f, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(cpu, bc1t, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(cpu, bc1fl, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), + RABBITIZER_DEF_INSTR_ID(cpu, bc1tl, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true), // OP fd, fs, ft - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, add_s, add.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Add - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sub_s, sub.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Sub - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mul_s, mul.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Multiply - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, div_s, div.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Divide - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, add_d, add.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Add - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sub_d, sub.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Sub - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mul_d, mul.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Multiply - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, div_d, div.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Divide + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, add_s, add.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Add + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sub_s, sub.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Sub + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mul_s, mul.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Multiply + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, div_s, div.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Divide + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, add_d, add.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Add + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sub_d, sub.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Sub + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mul_d, mul.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Multiply + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, div_d, div.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Divide // OP fd, fs - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sqrt_s, sqrt.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Square Root - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, abs_s, abs.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Absolute Value - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mov_s, mov.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Move - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, neg_s, neg.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Negate - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sqrt_d, sqrt.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Square Root - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, abs_d, abs.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Absolute Value - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mov_d, mov.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Move - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, neg_d, neg.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Negate - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_l_s, round.l.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Round to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_l_s, trunc.l.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Truncate to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_l_s, ceil.l.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Ceiling Convert to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_l_s, floor.l.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Floor Convert to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_l_d, round.l.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Round to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_l_d, trunc.l.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Truncate to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_l_d, ceil.l.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Ceiling Convert to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_l_d, floor.l.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Floor Convert to Long Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_w_s, round.w.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Round to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_w_s, trunc.w.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Truncate to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_w_s, ceil.w.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Ceiling Convert to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_w_s, floor.w.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Floor Convert to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_w_d, round.w.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Round to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_w_d, trunc.w.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Truncate to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_w_d, ceil.w.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Ceiling Convert to Word Fixed-Point - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_w_d, floor.w.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Floor Convert to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sqrt_s, sqrt.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Square Root + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, abs_s, abs.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Absolute Value + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mov_s, mov.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Move + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, neg_s, neg.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Negate + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, sqrt_d, sqrt.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Square Root + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, abs_d, abs.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Absolute Value + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, mov_d, mov.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Move + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, neg_d, neg.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Negate + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_l_s, round.l.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Round to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_l_s, trunc.l.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Truncate to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_l_s, ceil.l.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Ceiling Convert to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_l_s, floor.l.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Floor Convert to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_l_d, round.l.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Round to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_l_d, trunc.l.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Truncate to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_l_d, ceil.l.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Ceiling Convert to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_l_d, floor.l.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Floor Convert to Long Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_w_s, round.w.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Round to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_w_s, trunc.w.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Truncate to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_w_s, ceil.w.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Ceiling Convert to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_w_s, floor.w.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), // Floating-Point Floor Convert to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, round_w_d, round.w.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Round to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, trunc_w_d, trunc.w.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Truncate to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, ceil_w_d, ceil.w.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Ceiling Convert to Word Fixed-Point + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, floor_w_d, floor.w.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Floating-Point Floor Convert to Word Fixed-Point // OP fs, ft - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_f_s, c.f.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_un_s, c.un.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_eq_s, c.eq.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ueq_s, c.ueq.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_olt_s, c.olt.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ult_s, c.ult.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ole_s, c.ole.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ule_s, c.ule.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_f_d, c.f.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_un_d, c.un.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_eq_d, c.eq.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ueq_d, c.ueq.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_olt_d, c.olt.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ult_d, c.ult.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ole_d, c.ole.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ule_d, c.ule.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_sf_s, c.sf.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngle_s, c.ngle.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_seq_s, c.seq.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngl_s, c.ngl.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_lt_s, c.lt.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_nge_s, c.nge.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_le_s, c.le.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngt_s, c.ngt.s, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_sf_d, c.sf.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngle_d, c.ngle.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_seq_d, c.seq.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngl_d, c.ngl.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_lt_d, c.lt.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_nge_d, c.nge.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_le_d, c.le.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngt_d, c.ngt.d, .operands={RABBITIZER_REGISTER_TYPE_fs, RABBITIZER_REGISTER_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_f_s, c.f.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_un_s, c.un.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_eq_s, c.eq.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ueq_s, c.ueq.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_olt_s, c.olt.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ult_s, c.ult.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ole_s, c.ole.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ule_s, c.ule.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_f_d, c.f.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_un_d, c.un.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_eq_d, c.eq.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ueq_d, c.ueq.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_olt_d, c.olt.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ult_d, c.ult.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ole_d, c.ole.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ule_d, c.ule.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_sf_s, c.sf.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngle_s, c.ngle.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_seq_s, c.seq.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngl_s, c.ngl.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_lt_s, c.lt.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_nge_s, c.nge.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_le_s, c.le.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngt_s, c.ngt.s, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_sf_d, c.sf.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngle_d, c.ngle.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_seq_d, c.seq.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngl_d, c.ngl.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_lt_d, c.lt.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_nge_d, c.nge.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_le_d, c.le.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, c_ngt_d, c.ngt.d, .operands={RABBITIZER_OPERAND_TYPE_fs, RABBITIZER_OPERAND_TYPE_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // OP fd, fs - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_d, cvt.s.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_w, cvt.s.w, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_l, cvt.s.l, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_s, cvt.d.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_w, cvt.d.w, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_l, cvt.d.l, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_w_s, cvt.w.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_w_d, cvt.w.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_l_s, cvt.l.s, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), - RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_l_d, cvt.l.d, .operands={RABBITIZER_REGISTER_TYPE_fd, RABBITIZER_REGISTER_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_d, cvt.s.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_w, cvt.s.w, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_s_l, cvt.s.l, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_s, cvt.d.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_w, cvt.d.w, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_d_l, cvt.d.l, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_w_s, cvt.w.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_w_d, cvt.w.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_l_s, cvt.l.s, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true), + RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, cvt_l_d, cvt.l.d, .operands={RABBITIZER_OPERAND_TYPE_fd, RABBITIZER_OPERAND_TYPE_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true), // Pseudo-Instruction Unique IDs // OP RABBITIZER_DEF_INSTR_ID(cpu, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R), // No OPeration // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(cpu, beqz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual Zero - RABBITIZER_DEF_INSTR_ID(cpu, bnez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal Zero + RABBITIZER_DEF_INSTR_ID(cpu, beqz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual Zero + RABBITIZER_DEF_INSTR_ID(cpu, bnez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal Zero // OP IMM - RABBITIZER_DEF_INSTR_ID(cpu, b, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch (unconditional) + RABBITIZER_DEF_INSTR_ID(cpu, b, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch (unconditional) // OP rd, rs - RABBITIZER_DEF_INSTR_ID(cpu, move, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move - RABBITIZER_DEF_INSTR_ID(cpu, not, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not + RABBITIZER_DEF_INSTR_ID(cpu, move, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move + RABBITIZER_DEF_INSTR_ID(cpu, not, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not // OP rd, rt - RABBITIZER_DEF_INSTR_ID(cpu, negu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), + RABBITIZER_DEF_INSTR_ID(cpu, negu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), diff --git a/include/instructions/instr_id/RabbitizerInstrId_rsp.inc b/include/instructions/instr_id/RabbitizerInstrId_rsp.inc index 30c5509..168d8f6 100644 --- a/include/instructions/instr_id/RabbitizerInstrId_rsp.inc +++ b/include/instructions/instr_id/RabbitizerInstrId_rsp.inc @@ -2,193 +2,193 @@ /* SPDX-License-Identifier: MIT */ // RSP instructions - RABBITIZER_DEF_INSTR_ID(rsp, INVALID, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, INVALID, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), // OP vd, vs, vt[elementhigh] - RABBITIZER_DEF_INSTR_ID(rsp, vmulf, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmulu, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrndp, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmulq, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmudl, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmudm, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmudn, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmudh, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmacf, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmacu, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrndn, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmacq, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmadl, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmadm, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmadn, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmadh, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vadd, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vsub, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vabs, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vaddc, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vsubc, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vsar, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vand, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vnand, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vor, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vnor, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vxor, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vnxor, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vlt, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, veq, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vne, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vge, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vcl, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vch, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vcr, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmrg, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd, RABBITIZER_REGISTER_TYPE_RSP_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmulf, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmulu, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrndp, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmulq, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmudl, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmudm, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmudn, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmudh, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmacf, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmacu, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrndn, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmacq, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmadl, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmadm, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmadn, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmadh, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vadd, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vsub, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vabs, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vaddc, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vsubc, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vsar, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vand, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vnand, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vor, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vnor, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vxor, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vnxor, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vlt, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, veq, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vne, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vge, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vcl, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vch, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vcr, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmrg, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd, RABBITIZER_OPERAND_TYPE_RSP_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), // OP vd[vs], vt[elementhigh] - RABBITIZER_DEF_INSTR_ID(rsp, vrcp, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrcpl, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), // operands may be wrong - RABBITIZER_DEF_INSTR_ID(rsp, vrcph, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vmov, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrsq, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrsql, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), - RABBITIZER_DEF_INSTR_ID(rsp, vrsqh, .operands={RABBITIZER_REGISTER_TYPE_RSP_vd_vs, RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrcp, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrcpl, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), // operands may be wrong + RABBITIZER_DEF_INSTR_ID(rsp, vrcph, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vmov, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrsq, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrsql, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), + RABBITIZER_DEF_INSTR_ID(rsp, vrsqh, .operands={RABBITIZER_OPERAND_TYPE_RSP_vd_vs, RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh}), // OP RABBITIZER_DEF_INSTR_ID(rsp, vnop, .operands={0}), // OP rt, vd[index] - RABBITIZER_DEF_INSTR_ID(rsp, mfc2, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_RSP_vd_index}, .modifiesRt=true), - RABBITIZER_DEF_INSTR_ID(rsp, mtc2, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_RSP_vd_index}), + RABBITIZER_DEF_INSTR_ID(rsp, mfc2, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_RSP_vd_index}, .modifiesRt=true), + RABBITIZER_DEF_INSTR_ID(rsp, mtc2, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_RSP_vd_index}), // OP rt, rd - RABBITIZER_DEF_INSTR_ID(rsp, cfc2, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rd}, .modifiesRt=true), - RABBITIZER_DEF_INSTR_ID(rsp, ctc2, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rd}), + RABBITIZER_DEF_INSTR_ID(rsp, cfc2, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rd}, .modifiesRt=true), + RABBITIZER_DEF_INSTR_ID(rsp, ctc2, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rd}), // OP vt[elementlow], offset(vs) - RABBITIZER_DEF_INSTR_ID(rsp, sbv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, ssv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, slv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, sdv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, sqv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, srv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, spv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, suv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, swv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, shv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, sfv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, stv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lbv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lsv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, llv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, ldv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lqv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lrv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lpv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, luv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lhv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, lfv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), - RABBITIZER_DEF_INSTR_ID(rsp, ltv, .operands={RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow, RABBITIZER_REGISTER_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, sbv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, ssv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, slv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, sdv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, sqv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, srv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, spv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, suv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, swv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, shv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, sfv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, stv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lbv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lsv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, llv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, ldv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lqv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lrv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lpv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, luv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lhv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, lfv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), + RABBITIZER_DEF_INSTR_ID(rsp, ltv, .operands={RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow, RABBITIZER_OPERAND_TYPE_RSP_offset_rs}), // CPU instructions but with rsp registers // OP rs - RABBITIZER_DEF_INSTR_ID(rsp, jr, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true), // Jump Register - RABBITIZER_DEF_INSTR_ID(rsp, jalr, .operands={RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register + RABBITIZER_DEF_INSTR_ID(rsp, jr, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true), // Jump Register + RABBITIZER_DEF_INSTR_ID(rsp, jalr, .operands={RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // OP rd, rs - RABBITIZER_DEF_INSTR_ID_ALTNAME(rsp, jalr_rd, jalr, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // Special case for rd != 31 + RABBITIZER_DEF_INSTR_ID_ALTNAME(rsp, jalr_rd, jalr, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true), // Jump And Link Register // Special case for rd != 31 // OP rd, rs, rt - RABBITIZER_DEF_INSTR_ID(rsp, movz, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Zero - RABBITIZER_DEF_INSTR_ID(rsp, movn, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Not zero - RABBITIZER_DEF_INSTR_ID(rsp, add, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD word - RABBITIZER_DEF_INSTR_ID(rsp, addu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD Unsigned word - RABBITIZER_DEF_INSTR_ID(rsp, sub, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Subtract word - RABBITIZER_DEF_INSTR_ID(rsp, subu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // SUBtract Unsigned word - RABBITIZER_DEF_INSTR_ID(rsp, and, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // AND - RABBITIZER_DEF_INSTR_ID(rsp, or, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // OR - RABBITIZER_DEF_INSTR_ID(rsp, xor, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // eXclusive OR - RABBITIZER_DEF_INSTR_ID(rsp, nor, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not OR - RABBITIZER_DEF_INSTR_ID(rsp, slt, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than - RABBITIZER_DEF_INSTR_ID(rsp, sltu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than Unsigned + RABBITIZER_DEF_INSTR_ID(rsp, movz, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Zero + RABBITIZER_DEF_INSTR_ID(rsp, movn, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // MOVe conditional on Not zero + RABBITIZER_DEF_INSTR_ID(rsp, add, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD word + RABBITIZER_DEF_INSTR_ID(rsp, addu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // ADD Unsigned word + RABBITIZER_DEF_INSTR_ID(rsp, sub, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Subtract word + RABBITIZER_DEF_INSTR_ID(rsp, subu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // SUBtract Unsigned word + RABBITIZER_DEF_INSTR_ID(rsp, and, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // AND + RABBITIZER_DEF_INSTR_ID(rsp, or, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // OR + RABBITIZER_DEF_INSTR_ID(rsp, xor, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // eXclusive OR + RABBITIZER_DEF_INSTR_ID(rsp, nor, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not OR + RABBITIZER_DEF_INSTR_ID(rsp, slt, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than + RABBITIZER_DEF_INSTR_ID(rsp, sltu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Set on Less Than Unsigned // OP code - RABBITIZER_DEF_INSTR_ID(rsp, break, .operands={RABBITIZER_REGISTER_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Break + RABBITIZER_DEF_INSTR_ID(rsp, break, .operands={RABBITIZER_OPERAND_TYPE_code}, .instrType=RABBITIZER_INSTR_TYPE_R), // Break // OP rd, rt, rs - RABBITIZER_DEF_INSTR_ID(rsp, sllv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical Variable - RABBITIZER_DEF_INSTR_ID(rsp, srlv, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical Variable - RABBITIZER_DEF_INSTR_ID(rsp, srav, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic Variable + RABBITIZER_DEF_INSTR_ID(rsp, sllv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical Variable + RABBITIZER_DEF_INSTR_ID(rsp, srlv, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical Variable + RABBITIZER_DEF_INSTR_ID(rsp, srav, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic Variable // OP rd, rt, sa - RABBITIZER_DEF_INSTR_ID(rsp, sll, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical - RABBITIZER_DEF_INSTR_ID(rsp, srl, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical - RABBITIZER_DEF_INSTR_ID(rsp, sra, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic + RABBITIZER_DEF_INSTR_ID(rsp, sll, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Left Logical + RABBITIZER_DEF_INSTR_ID(rsp, srl, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Logical + RABBITIZER_DEF_INSTR_ID(rsp, sra, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Shift word Right Arithmetic // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(rsp, bltz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less Than Zero - RABBITIZER_DEF_INSTR_ID(rsp, bgez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater than or Equal to Zero - RABBITIZER_DEF_INSTR_ID(rsp, bltzal, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), - RABBITIZER_DEF_INSTR_ID(rsp, bgezal, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(rsp, bltz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less Than Zero + RABBITIZER_DEF_INSTR_ID(rsp, bgez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater than or Equal to Zero + RABBITIZER_DEF_INSTR_ID(rsp, bltzal, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), + RABBITIZER_DEF_INSTR_ID(rsp, bgezal, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // OP LABEL - RABBITIZER_DEF_INSTR_ID(rsp, j, .operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump - RABBITIZER_DEF_INSTR_ID(rsp, jal, .operands={RABBITIZER_REGISTER_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump And Link + RABBITIZER_DEF_INSTR_ID(rsp, j, .operands={RABBITIZER_OPERAND_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump + RABBITIZER_DEF_INSTR_ID(rsp, jal, .operands={RABBITIZER_OPERAND_TYPE_LABEL}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true), // Jump And Link // OP rs, rt, IMM - RABBITIZER_DEF_INSTR_ID(rsp, beq, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual - RABBITIZER_DEF_INSTR_ID(rsp, bne, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal + RABBITIZER_DEF_INSTR_ID(rsp, beq, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual + RABBITIZER_DEF_INSTR_ID(rsp, bne, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(rsp, blez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less than or Equal to Zero - RABBITIZER_DEF_INSTR_ID(rsp, bgtz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater Than Zero + RABBITIZER_DEF_INSTR_ID(rsp, blez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Less than or Equal to Zero + RABBITIZER_DEF_INSTR_ID(rsp, bgtz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Greater Than Zero // OP rt, IMM - RABBITIZER_DEF_INSTR_ID(rsp, lui, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Load Upper Immediate + RABBITIZER_DEF_INSTR_ID(rsp, lui, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Load Upper Immediate // OP rt, rs, IMM - RABBITIZER_DEF_INSTR_ID(rsp, andi, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // And Immediate - RABBITIZER_DEF_INSTR_ID(rsp, ori, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Or Immediate - RABBITIZER_DEF_INSTR_ID(rsp, xori, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // eXclusive OR Immediate - RABBITIZER_DEF_INSTR_ID(rsp, addi, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate - RABBITIZER_DEF_INSTR_ID(rsp, addiu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate Unsigned Word - RABBITIZER_DEF_INSTR_ID(rsp, slti, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate - RABBITIZER_DEF_INSTR_ID(rsp, sltiu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate Unsigned + RABBITIZER_DEF_INSTR_ID(rsp, andi, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // And Immediate + RABBITIZER_DEF_INSTR_ID(rsp, ori, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // Or Immediate + RABBITIZER_DEF_INSTR_ID(rsp, xori, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true), // eXclusive OR Immediate + RABBITIZER_DEF_INSTR_ID(rsp, addi, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate + RABBITIZER_DEF_INSTR_ID(rsp, addiu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Add Immediate Unsigned Word + RABBITIZER_DEF_INSTR_ID(rsp, slti, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate + RABBITIZER_DEF_INSTR_ID(rsp, sltiu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Set on Less Than Immediate Unsigned // OP rt, IMM(base) - RABBITIZER_DEF_INSTR_ID(rsp, lb, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte - RABBITIZER_DEF_INSTR_ID(rsp, lh, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword - RABBITIZER_DEF_INSTR_ID(rsp, lw, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word - RABBITIZER_DEF_INSTR_ID(rsp, lbu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte Insigned - RABBITIZER_DEF_INSTR_ID(rsp, lhu, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword Unsigned - RABBITIZER_DEF_INSTR_ID(rsp, sb, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Byte - RABBITIZER_DEF_INSTR_ID(rsp, sh, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Halfword - RABBITIZER_DEF_INSTR_ID(rsp, sw, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word - RABBITIZER_DEF_INSTR_ID(rsp, pref, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Prefetch + RABBITIZER_DEF_INSTR_ID(rsp, lb, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte + RABBITIZER_DEF_INSTR_ID(rsp, lh, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword + RABBITIZER_DEF_INSTR_ID(rsp, lw, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Word + RABBITIZER_DEF_INSTR_ID(rsp, lbu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Byte Insigned + RABBITIZER_DEF_INSTR_ID(rsp, lhu, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Load Halfword Unsigned + RABBITIZER_DEF_INSTR_ID(rsp, sb, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Byte + RABBITIZER_DEF_INSTR_ID(rsp, sh, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Halfword + RABBITIZER_DEF_INSTR_ID(rsp, sw, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Store Word + RABBITIZER_DEF_INSTR_ID(rsp, pref, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true), // Prefetch - RABBITIZER_DEF_INSTR_ID(rsp, cache, .operands={RABBITIZER_REGISTER_TYPE_op, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Cache + RABBITIZER_DEF_INSTR_ID(rsp, cache, .operands={RABBITIZER_OPERAND_TYPE_op, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I), // Cache // OP ft, IMM(base) - RABBITIZER_DEF_INSTR_ID(rsp, lwc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Load Word to Coprocessor z - RABBITIZER_DEF_INSTR_ID(rsp, swc1, .operands={RABBITIZER_REGISTER_TYPE_ft, RABBITIZER_REGISTER_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Store Word from Coprocessor z + RABBITIZER_DEF_INSTR_ID(rsp, lwc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Load Word to Coprocessor z + RABBITIZER_DEF_INSTR_ID(rsp, swc1, .operands={RABBITIZER_OPERAND_TYPE_ft, RABBITIZER_OPERAND_TYPE_IMM_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true), // Store Word from Coprocessor z // OP rt, cop0d - RABBITIZER_DEF_INSTR_ID(rsp, mfc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move word From CP0 - RABBITIZER_DEF_INSTR_ID(rsp, mtc0, .operands={RABBITIZER_REGISTER_TYPE_rt, RABBITIZER_REGISTER_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move word to CP0 + RABBITIZER_DEF_INSTR_ID(rsp, mfc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true), // Move word From CP0 + RABBITIZER_DEF_INSTR_ID(rsp, mtc0, .operands={RABBITIZER_OPERAND_TYPE_rt, RABBITIZER_OPERAND_TYPE_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN), // Move word to CP0 // Pseudo-Instruction Unique IDs // OP RABBITIZER_DEF_INSTR_ID(rsp, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R), // No OPeration // OP rs, IMM - RABBITIZER_DEF_INSTR_ID(rsp, beqz, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual Zero - RABBITIZER_DEF_INSTR_ID(rsp, bnez, .operands={RABBITIZER_REGISTER_TYPE_rs, RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal Zero + RABBITIZER_DEF_INSTR_ID(rsp, beqz, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on EQual Zero + RABBITIZER_DEF_INSTR_ID(rsp, bnez, .operands={RABBITIZER_OPERAND_TYPE_rs, RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch on Not Equal Zero // OP IMM - RABBITIZER_DEF_INSTR_ID(rsp, b, .operands={RABBITIZER_REGISTER_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch (unconditional) + RABBITIZER_DEF_INSTR_ID(rsp, b, .operands={RABBITIZER_OPERAND_TYPE_IMM}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true), // Branch (unconditional) // OP rd, rs - RABBITIZER_DEF_INSTR_ID(rsp, move, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move - RABBITIZER_DEF_INSTR_ID(rsp, not, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not + RABBITIZER_DEF_INSTR_ID(rsp, move, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Move + RABBITIZER_DEF_INSTR_ID(rsp, not, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), // Not // OP rd, rt - RABBITIZER_DEF_INSTR_ID(rsp, negu, .operands={RABBITIZER_REGISTER_TYPE_rd, RABBITIZER_REGISTER_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), + RABBITIZER_DEF_INSTR_ID(rsp, negu, .operands={RABBITIZER_OPERAND_TYPE_rd, RABBITIZER_OPERAND_TYPE_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true), diff --git a/src/instructions/RabbitizerInstr/RabbitizerInstr.c b/src/instructions/RabbitizerInstr/RabbitizerInstr.c index 1e6cddc..b7a3cff 100644 --- a/src/instructions/RabbitizerInstr/RabbitizerInstr.c +++ b/src/instructions/RabbitizerInstr/RabbitizerInstr.c @@ -106,43 +106,43 @@ int32_t RabbitizerInstr_getBranchOffset(const RabbitizerInstr *self) { void RabbitizerInstr_blankOut(RabbitizerInstr *self) { - for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_INVALID; i++) { + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_INVALID; i++) { switch (self->descriptor->operands[i]) { - case RABBITIZER_REGISTER_TYPE_rs: - case RABBITIZER_REGISTER_TYPE_RSP_rs: - case RABBITIZER_REGISTER_TYPE_RSP_vs: + case RABBITIZER_OPERAND_TYPE_rs: + case RABBITIZER_OPERAND_TYPE_RSP_rs: + case RABBITIZER_OPERAND_TYPE_RSP_vs: self->rs = 0; break; - case RABBITIZER_REGISTER_TYPE_rt: - case RABBITIZER_REGISTER_TYPE_ft: - case RABBITIZER_REGISTER_TYPE_cop2t: - case RABBITIZER_REGISTER_TYPE_op: - case RABBITIZER_REGISTER_TYPE_RSP_rt: - case RABBITIZER_REGISTER_TYPE_RSP_vt: + case RABBITIZER_OPERAND_TYPE_rt: + case RABBITIZER_OPERAND_TYPE_ft: + case RABBITIZER_OPERAND_TYPE_cop2t: + case RABBITIZER_OPERAND_TYPE_op: + case RABBITIZER_OPERAND_TYPE_RSP_rt: + case RABBITIZER_OPERAND_TYPE_RSP_vt: self->rt = 0; break; - case RABBITIZER_REGISTER_TYPE_rd: - case RABBITIZER_REGISTER_TYPE_cop0d: - case RABBITIZER_REGISTER_TYPE_fs: - case RABBITIZER_REGISTER_TYPE_cop1cs: - case RABBITIZER_REGISTER_TYPE_RSP_rd: - case RABBITIZER_REGISTER_TYPE_RSP_vd: - case RABBITIZER_REGISTER_TYPE_RSP_cop0d: + case RABBITIZER_OPERAND_TYPE_rd: + case RABBITIZER_OPERAND_TYPE_cop0d: + case RABBITIZER_OPERAND_TYPE_fs: + case RABBITIZER_OPERAND_TYPE_cop1cs: + case RABBITIZER_OPERAND_TYPE_RSP_rd: + case RABBITIZER_OPERAND_TYPE_RSP_vd: + case RABBITIZER_OPERAND_TYPE_RSP_cop0d: self->rd = 0; break; - case RABBITIZER_REGISTER_TYPE_sa: - case RABBITIZER_REGISTER_TYPE_fd: + case RABBITIZER_OPERAND_TYPE_sa: + case RABBITIZER_OPERAND_TYPE_fd: self->sa = 0; break; - case RABBITIZER_REGISTER_TYPE_LABEL: + case RABBITIZER_OPERAND_TYPE_LABEL: // rs rt rd sa function self->function = 0; FALLTHROUGH; - case RABBITIZER_REGISTER_TYPE_code: + case RABBITIZER_OPERAND_TYPE_code: // rs rt rd sa self->rs = 0; self->rt = 0; @@ -150,46 +150,46 @@ void RabbitizerInstr_blankOut(RabbitizerInstr *self) { self->sa = 0; break; - case RABBITIZER_REGISTER_TYPE_IMM_base: + case RABBITIZER_OPERAND_TYPE_IMM_base: // rs rd sa function self->rs = 0; FALLTHROUGH; - case RABBITIZER_REGISTER_TYPE_IMM: + case RABBITIZER_OPERAND_TYPE_IMM: // rd sa function self->rd = 0; self->sa = 0; self->function = 0; break; - case RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh: + case RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh: self->rt = 0; self->rs &= ~0xF; break; - case RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow: + case RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow: self->rt = 0; self->sa &= ~0x1E; break; - case RABBITIZER_REGISTER_TYPE_RSP_vd_vs: + case RABBITIZER_OPERAND_TYPE_RSP_vd_vs: self->rd = 0; self->rs = 0; break; - case RABBITIZER_REGISTER_TYPE_RSP_vd_index: + case RABBITIZER_OPERAND_TYPE_RSP_vd_index: self->rd = 0; self->sa &= ~0x1; break; - case RABBITIZER_REGISTER_TYPE_RSP_offset_rs: + case RABBITIZER_OPERAND_TYPE_RSP_offset_rs: self->function = 0; self->sa &= ~0x1; self->rs = 0; break; - case RABBITIZER_REGISTER_TYPE_INVALID: - case RABBITIZER_REGISTER_TYPE_MAX: - assert(self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_INVALID && self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_MAX); + case RABBITIZER_OPERAND_TYPE_INVALID: + case RABBITIZER_OPERAND_TYPE_MAX: + assert(self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_INVALID && self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_MAX); break; } } diff --git a/src/instructions/RabbitizerInstr/RabbitizerInstr_Disassemble.c b/src/instructions/RabbitizerInstr/RabbitizerInstr_Disassemble.c index 8a56394..350ce61 100644 --- a/src/instructions/RabbitizerInstr/RabbitizerInstr_Disassemble.c +++ b/src/instructions/RabbitizerInstr/RabbitizerInstr_Disassemble.c @@ -47,7 +47,7 @@ typedef size_t (*OperandCallback)(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength); -size_t RabbitizerRegisterType_processRs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processRs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameGpr(self->rs); @@ -55,7 +55,7 @@ size_t RabbitizerRegisterType_processRs(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processRt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processRt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameGpr(self->rt); @@ -63,7 +63,7 @@ size_t RabbitizerRegisterType_processRt(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processRd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processRd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameGpr(self->rd); @@ -71,7 +71,7 @@ size_t RabbitizerRegisterType_processRd(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processCop0d(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processCop0d(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop0(self->rd); @@ -79,7 +79,7 @@ size_t RabbitizerRegisterType_processCop0d(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterType_processFs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processFs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop1(RabbitizerInstr_getFs(self)); @@ -87,7 +87,7 @@ size_t RabbitizerRegisterType_processFs(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processFt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processFt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop1(RabbitizerInstr_getFt(self)); @@ -95,7 +95,7 @@ size_t RabbitizerRegisterType_processFt(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processFd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processFd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop1(RabbitizerInstr_getFd(self)); @@ -103,7 +103,7 @@ size_t RabbitizerRegisterType_processFd(const RabbitizerInstr *self, char *dst, return totalSize; } -size_t RabbitizerRegisterType_processCop1Cs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processCop1Cs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop1Control(RabbitizerInstr_getFs(self)); @@ -111,7 +111,7 @@ size_t RabbitizerRegisterType_processCop1Cs(const RabbitizerInstr *self, char *d return totalSize; } -size_t RabbitizerRegisterType_processCop2t(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processCop2t(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameCop2(self->rt); @@ -119,21 +119,21 @@ size_t RabbitizerRegisterType_processCop2t(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterType_processSa(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processSa(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", self->sa); return totalSize; } -size_t RabbitizerRegisterType_processOp(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processOp(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%02X", self->rt); return totalSize; } -size_t RabbitizerRegisterType_processCode(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandType_processCode(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; int code = (self->rs << 5) | (self->rt); int lower = (self->rd << 5) | (self->sa); @@ -146,7 +146,7 @@ size_t RabbitizerRegisterType_processCode(const RabbitizerInstr *self, char *dst return totalSize; } -size_t RabbitizerRegisterType_processLabel(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_processLabel(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; if (immOverride != NULL) { @@ -159,7 +159,7 @@ size_t RabbitizerRegisterType_processLabel(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterType_processImmediate(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_processImmediate(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; uint32_t imm; @@ -182,21 +182,21 @@ size_t RabbitizerRegisterType_processImmediate(const RabbitizerInstr *self, char return totalSize; } -size_t RabbitizerRegisterType_processImmediateBase(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_processImmediateBase(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterType_processImmediate(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_processImmediate(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterType_processRs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_processRs(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); return totalSize; } -size_t RabbitizerRegisterTypeRsp_processRs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processRs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspGpr(self->rs); @@ -204,7 +204,7 @@ size_t RabbitizerRegisterTypeRsp_processRs(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processRt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processRt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspGpr(self->rt); @@ -212,7 +212,7 @@ size_t RabbitizerRegisterTypeRsp_processRt(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processRd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processRd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspVector(self->rd); @@ -220,7 +220,7 @@ size_t RabbitizerRegisterTypeRsp_processRd(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processCop0d(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processCop0d(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspCop0(self->rd); @@ -228,7 +228,7 @@ size_t RabbitizerRegisterTypeRsp_processCop0d(const RabbitizerInstr *self, char return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVs(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_VS(self)); @@ -236,7 +236,7 @@ size_t RabbitizerRegisterTypeRsp_processVs(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVt(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_VT(self)); @@ -244,7 +244,7 @@ size_t RabbitizerRegisterTypeRsp_processVt(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVd(const RabbitizerInstr *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_VD(self)); @@ -252,11 +252,11 @@ size_t RabbitizerRegisterTypeRsp_processVd(const RabbitizerInstr *self, char *ds return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVtElementhigh(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVtElementhigh(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; uint8_t element; - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterTypeRsp_processVt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandTypeRsp_processVt(self, dst, immOverride, immOverrideLength)); element = RabbitizerInstrRsp_processVectorElement(self, RAB_INSTR_RSP_GET_ELEMENT_HIGH(self)); if (element != 0) { @@ -267,11 +267,11 @@ size_t RabbitizerRegisterTypeRsp_processVtElementhigh(const RabbitizerInstr *sel return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVtElementlow(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVtElementlow(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; uint8_t element; - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterTypeRsp_processVt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandTypeRsp_processVt(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '['); @@ -282,10 +282,10 @@ size_t RabbitizerRegisterTypeRsp_processVtElementlow(const RabbitizerInstr *self return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVdVs(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVdVs(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterTypeRsp_processVd(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandTypeRsp_processVd(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '['); RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_RSP_GET_VS(self)); @@ -293,10 +293,10 @@ size_t RabbitizerRegisterTypeRsp_processVdVs(const RabbitizerInstr *self, char * return totalSize; } -size_t RabbitizerRegisterTypeRsp_processVdIndex(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processVdIndex(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterTypeRsp_processVd(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandTypeRsp_processVd(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '['); RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", (self->sa >> 1)); @@ -304,47 +304,47 @@ size_t RabbitizerRegisterTypeRsp_processVdIndex(const RabbitizerInstr *self, cha return totalSize; } -size_t RabbitizerRegisterTypeRsp_processOffsetVs(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandTypeRsp_processOffsetVs(const RabbitizerInstr *self, char *dst, const char *immOverride, size_t immOverrideLength) { size_t totalSize = 0; RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", RabbitizerInstrRsp_GetOffsetVector(self)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerRegisterTypeRsp_processRs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandTypeRsp_processRs(self, dst, immOverride, immOverrideLength)); RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); return totalSize; } const OperandCallback instrOpercandCallbacks[] = { - [RABBITIZER_REGISTER_TYPE_rs] = RabbitizerRegisterType_processRs, - [RABBITIZER_REGISTER_TYPE_rt] = RabbitizerRegisterType_processRt, - [RABBITIZER_REGISTER_TYPE_rd] = RabbitizerRegisterType_processRd, - [RABBITIZER_REGISTER_TYPE_cop0d] = RabbitizerRegisterType_processCop0d, - [RABBITIZER_REGISTER_TYPE_fs] = RabbitizerRegisterType_processFs, - [RABBITIZER_REGISTER_TYPE_ft] = RabbitizerRegisterType_processFt, - [RABBITIZER_REGISTER_TYPE_fd] = RabbitizerRegisterType_processFd, - [RABBITIZER_REGISTER_TYPE_cop1cs] = RabbitizerRegisterType_processCop1Cs, - [RABBITIZER_REGISTER_TYPE_cop2t] = RabbitizerRegisterType_processCop2t, - [RABBITIZER_REGISTER_TYPE_sa] = RabbitizerRegisterType_processSa, - [RABBITIZER_REGISTER_TYPE_op] = RabbitizerRegisterType_processOp, - [RABBITIZER_REGISTER_TYPE_code] = RabbitizerRegisterType_processCode, - [RABBITIZER_REGISTER_TYPE_LABEL] = RabbitizerRegisterType_processLabel, - [RABBITIZER_REGISTER_TYPE_IMM] = RabbitizerRegisterType_processImmediate, - [RABBITIZER_REGISTER_TYPE_IMM_base] = RabbitizerRegisterType_processImmediateBase, + [RABBITIZER_OPERAND_TYPE_rs] = RabbitizerOperandType_processRs, + [RABBITIZER_OPERAND_TYPE_rt] = RabbitizerOperandType_processRt, + [RABBITIZER_OPERAND_TYPE_rd] = RabbitizerOperandType_processRd, + [RABBITIZER_OPERAND_TYPE_cop0d] = RabbitizerOperandType_processCop0d, + [RABBITIZER_OPERAND_TYPE_fs] = RabbitizerOperandType_processFs, + [RABBITIZER_OPERAND_TYPE_ft] = RabbitizerOperandType_processFt, + [RABBITIZER_OPERAND_TYPE_fd] = RabbitizerOperandType_processFd, + [RABBITIZER_OPERAND_TYPE_cop1cs] = RabbitizerOperandType_processCop1Cs, + [RABBITIZER_OPERAND_TYPE_cop2t] = RabbitizerOperandType_processCop2t, + [RABBITIZER_OPERAND_TYPE_sa] = RabbitizerOperandType_processSa, + [RABBITIZER_OPERAND_TYPE_op] = RabbitizerOperandType_processOp, + [RABBITIZER_OPERAND_TYPE_code] = RabbitizerOperandType_processCode, + [RABBITIZER_OPERAND_TYPE_LABEL] = RabbitizerOperandType_processLabel, + [RABBITIZER_OPERAND_TYPE_IMM] = RabbitizerOperandType_processImmediate, + [RABBITIZER_OPERAND_TYPE_IMM_base] = RabbitizerOperandType_processImmediateBase, // rsp - [RABBITIZER_REGISTER_TYPE_RSP_rs] = RabbitizerRegisterTypeRsp_processRs, - [RABBITIZER_REGISTER_TYPE_RSP_rt] = RabbitizerRegisterTypeRsp_processRt, - [RABBITIZER_REGISTER_TYPE_RSP_rd] = RabbitizerRegisterTypeRsp_processRd, - [RABBITIZER_REGISTER_TYPE_RSP_cop0d] = RabbitizerRegisterTypeRsp_processCop0d, - [RABBITIZER_REGISTER_TYPE_RSP_vs] = RabbitizerRegisterTypeRsp_processVs, - [RABBITIZER_REGISTER_TYPE_RSP_vt] = RabbitizerRegisterTypeRsp_processVt, - [RABBITIZER_REGISTER_TYPE_RSP_vd] = RabbitizerRegisterTypeRsp_processVd, - [RABBITIZER_REGISTER_TYPE_RSP_vt_elementhigh] = RabbitizerRegisterTypeRsp_processVtElementhigh, - [RABBITIZER_REGISTER_TYPE_RSP_vt_elementlow] = RabbitizerRegisterTypeRsp_processVtElementlow, - [RABBITIZER_REGISTER_TYPE_RSP_vd_vs] = RabbitizerRegisterTypeRsp_processVdVs, - [RABBITIZER_REGISTER_TYPE_RSP_vd_index] = RabbitizerRegisterTypeRsp_processVdIndex, - [RABBITIZER_REGISTER_TYPE_RSP_offset_rs] = RabbitizerRegisterTypeRsp_processOffsetVs, + [RABBITIZER_OPERAND_TYPE_RSP_rs] = RabbitizerOperandTypeRsp_processRs, + [RABBITIZER_OPERAND_TYPE_RSP_rt] = RabbitizerOperandTypeRsp_processRt, + [RABBITIZER_OPERAND_TYPE_RSP_rd] = RabbitizerOperandTypeRsp_processRd, + [RABBITIZER_OPERAND_TYPE_RSP_cop0d] = RabbitizerOperandTypeRsp_processCop0d, + [RABBITIZER_OPERAND_TYPE_RSP_vs] = RabbitizerOperandTypeRsp_processVs, + [RABBITIZER_OPERAND_TYPE_RSP_vt] = RabbitizerOperandTypeRsp_processVt, + [RABBITIZER_OPERAND_TYPE_RSP_vd] = RabbitizerOperandTypeRsp_processVd, + [RABBITIZER_OPERAND_TYPE_RSP_vt_elementhigh] = RabbitizerOperandTypeRsp_processVtElementhigh, + [RABBITIZER_OPERAND_TYPE_RSP_vt_elementlow] = RabbitizerOperandTypeRsp_processVtElementlow, + [RABBITIZER_OPERAND_TYPE_RSP_vd_vs] = RabbitizerOperandTypeRsp_processVdVs, + [RABBITIZER_OPERAND_TYPE_RSP_vd_index] = RabbitizerOperandTypeRsp_processVdIndex, + [RABBITIZER_OPERAND_TYPE_RSP_offset_rs] = RabbitizerOperandTypeRsp_processOffsetVs, }; @@ -356,7 +356,7 @@ size_t RabbitizerInstr_getSizeForBufferInstrDisasm(const RabbitizerInstr *self, totalSize += opcodeNameLength; - if (self->descriptor->operands[0] == RABBITIZER_REGISTER_TYPE_INVALID) { + if (self->descriptor->operands[0] == RABBITIZER_OPERAND_TYPE_INVALID) { // There are no operands return totalSize; } @@ -364,7 +364,7 @@ size_t RabbitizerInstr_getSizeForBufferInstrDisasm(const RabbitizerInstr *self, totalSize += extraLJust; totalSize++; - for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_INVALID; i++) { + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_INVALID; i++) { if (i != 0) { totalSize += 2; } @@ -384,7 +384,7 @@ size_t RabbitizerInstr_disassembleInstruction(const RabbitizerInstr *self, char RABUTILS_BUFFER_CPY(dst, totalSize, opcodeName); - if (self->descriptor->operands[0] == RABBITIZER_REGISTER_TYPE_INVALID) { + if (self->descriptor->operands[0] == RABBITIZER_OPERAND_TYPE_INVALID) { // There are no operands *dst = '\0'; return totalSize; @@ -394,8 +394,8 @@ size_t RabbitizerInstr_disassembleInstruction(const RabbitizerInstr *self, char RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); - for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_INVALID; i++) { - RabbitizerRegisterType operand; + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_INVALID; i++) { + RabbitizerOperandType operand; OperandCallback callback; if (i != 0) { @@ -404,8 +404,8 @@ size_t RabbitizerInstr_disassembleInstruction(const RabbitizerInstr *self, char } operand = self->descriptor->operands[i]; - assert(operand > RABBITIZER_REGISTER_TYPE_INVALID); - assert(operand < RABBITIZER_REGISTER_TYPE_MAX); + assert(operand > RABBITIZER_OPERAND_TYPE_INVALID); + assert(operand < RABBITIZER_OPERAND_TYPE_MAX); callback = instrOpercandCallbacks[operand]; assert(callback != NULL); @@ -454,22 +454,22 @@ bool RabbitizerInstr_mustDisasmAsData(const RabbitizerInstr *self) { bool hasRd = false; bool hasSa = false; - for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_REGISTER_TYPE_INVALID; i++) { - RabbitizerRegisterType operand = self->descriptor->operands[i]; + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RABBITIZER_OPERAND_TYPE_INVALID; i++) { + RabbitizerOperandType operand = self->descriptor->operands[i]; - if (operand == RABBITIZER_REGISTER_TYPE_code) { + if (operand == RABBITIZER_OPERAND_TYPE_code) { hasCode = true; } - if (operand == RABBITIZER_REGISTER_TYPE_rs) { + if (operand == RABBITIZER_OPERAND_TYPE_rs) { hasRs = true; } - if (operand == RABBITIZER_REGISTER_TYPE_rt) { + if (operand == RABBITIZER_OPERAND_TYPE_rt) { hasRt = true; } - if (operand == RABBITIZER_REGISTER_TYPE_rd) { + if (operand == RABBITIZER_OPERAND_TYPE_rd) { hasRd = true; } - if (operand == RABBITIZER_REGISTER_TYPE_sa) { + if (operand == RABBITIZER_OPERAND_TYPE_sa) { hasSa = true; } }