aboutsummaryrefslogtreecommitdiffstats
path: root/capstone/arch/RISCV
diff options
context:
space:
mode:
Diffstat (limited to 'capstone/arch/RISCV')
-rw-r--r--capstone/arch/RISCV/RISCVBaseInfo.h106
-rw-r--r--capstone/arch/RISCV/RISCVDisassembler.c434
-rw-r--r--capstone/arch/RISCV/RISCVDisassembler.h18
-rw-r--r--capstone/arch/RISCV/RISCVGenAsmWriter.inc2651
-rw-r--r--capstone/arch/RISCV/RISCVGenDisassemblerTables.inc1776
-rw-r--r--capstone/arch/RISCV/RISCVGenInsnNameMaps.inc275
-rw-r--r--capstone/arch/RISCV/RISCVGenInstrInfo.inc470
-rw-r--r--capstone/arch/RISCV/RISCVGenRegisterInfo.inc426
-rw-r--r--capstone/arch/RISCV/RISCVGenSubtargetInfo.inc33
-rw-r--r--capstone/arch/RISCV/RISCVInstPrinter.c204
-rw-r--r--capstone/arch/RISCV/RISCVInstPrinter.h24
-rw-r--r--capstone/arch/RISCV/RISCVMapping.c359
-rw-r--r--capstone/arch/RISCV/RISCVMapping.h22
-rw-r--r--capstone/arch/RISCV/RISCVMappingInsn.inc1635
-rw-r--r--capstone/arch/RISCV/RISCVModule.c42
-rw-r--r--capstone/arch/RISCV/RISCVModule.h12
16 files changed, 8487 insertions, 0 deletions
diff --git a/capstone/arch/RISCV/RISCVBaseInfo.h b/capstone/arch/RISCV/RISCVBaseInfo.h
new file mode 100644
index 000000000..e6ae1fcb5
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVBaseInfo.h
@@ -0,0 +1,106 @@
+//===-- RISCVBaseInfo.h - Top level definitions for RISCV MC ----*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains small standalone enum definitions for the RISCV target
+// useful for the compiler back-end and the MC libraries.
+//
+//===----------------------------------------------------------------------===//
+#ifndef CS_RISCVBASEINFO_H
+#define CS_RISCVBASEINFO_H
+#include "../../cs_priv.h"
+
+//#include "RISCVMCTargetDesc.h"
+
+// RISCVII - This namespace holds all of the target specific flags that
+// instruction info tracks. All definitions must match RISCVInstrFormats.td.
+enum {
+ IRISCVII_InstFormatPseudo = 0,
+ IRISCVII_InstFormatR = 1,
+ IRISCVII_InstFormatR4 = 2,
+ IRISCVII_InstFormatI = 3,
+ IRISCVII_InstFormatS = 4,
+ IRISCVII_InstFormatB = 5,
+ IRISCVII_InstFormatU = 6,
+ IRISCVII_InstFormatJ = 7,
+ IRISCVII_InstFormatCR = 8,
+ IRISCVII_InstFormatCI = 9,
+ IRISCVII_InstFormatCSS = 10,
+ IRISCVII_InstFormatCIW = 11,
+ IRISCVII_InstFormatCL = 12,
+ IRISCVII_InstFormatCS = 13,
+ IRISCVII_InstFormatCA = 14,
+ IRISCVII_InstFormatCB = 15,
+ IRISCVII_InstFormatCJ = 16,
+ IRISCVII_InstFormatOther = 17,
+
+ IRISCVII_InstFormatMask = 31
+};
+
+enum {
+ RISCVII_MO_None,
+ RISCVII_MO_LO,
+ RISCVII_MO_HI,
+ RISCVII_MO_PCREL_HI,
+};
+
+// Describes the predecessor/successor bits used in the FENCE instruction.
+enum FenceField {
+ RISCVFenceField_I = 8,
+ RISCVFenceField_O = 4,
+ RISCVFenceField_R = 2,
+ RISCVFenceField_W = 1
+};
+
+// Describes the supported floating point rounding mode encodings.
+enum RoundingMode {
+ RISCVFPRndMode_RNE = 0,
+ RISCVFPRndMode_RTZ = 1,
+ RISCVFPRndMode_RDN = 2,
+ RISCVFPRndMode_RUP = 3,
+ RISCVFPRndMode_RMM = 4,
+ RISCVFPRndMode_DYN = 7,
+ RISCVFPRndMode_Invalid
+};
+
+inline static const char *roundingModeToString(enum RoundingMode RndMode)
+{
+ switch (RndMode) {
+ default:
+ CS_ASSERT(0 && "Unknown floating point rounding mode");
+ case RISCVFPRndMode_RNE:
+ return "rne";
+ case RISCVFPRndMode_RTZ:
+ return "rtz";
+ case RISCVFPRndMode_RDN:
+ return "rdn";
+ case RISCVFPRndMode_RUP:
+ return "rup";
+ case RISCVFPRndMode_RMM:
+ return "rmm";
+ case RISCVFPRndMode_DYN:
+ return "dyn";
+ }
+}
+
+inline static bool RISCVFPRndMode_isValidRoundingMode(unsigned Mode)
+{
+ switch (Mode) {
+ default:
+ return false;
+ case RISCVFPRndMode_RNE:
+ case RISCVFPRndMode_RTZ:
+ case RISCVFPRndMode_RDN:
+ case RISCVFPRndMode_RUP:
+ case RISCVFPRndMode_RMM:
+ case RISCVFPRndMode_DYN:
+ return true;
+ }
+}
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVDisassembler.c b/capstone/arch/RISCV/RISCVDisassembler.c
new file mode 100644
index 000000000..9b0c089df
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVDisassembler.c
@@ -0,0 +1,434 @@
+//===-- RISCVDisassembler.cpp - Disassembler for RISCV --------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+/* Capstone Disassembly Engine */
+/* RISC-V Backend By Rodrigo Cortes Porto <porto703@gmail.com> &
+ Shawn Chang <citypw@gmail.com>, HardenedLinux@2018 */
+
+#ifdef CAPSTONE_HAS_RISCV
+
+#include <stdio.h> // DEBUG
+#include <stdlib.h>
+#include <string.h>
+
+#include "../../cs_priv.h"
+#include "../../utils.h"
+
+#include "../../MCInst.h"
+#include "../../MCInstrDesc.h"
+#include "../../MCFixedLenDisassembler.h"
+#include "../../MCRegisterInfo.h"
+#include "../../MCDisassembler.h"
+#include "../../MathExtras.h"
+#include "RISCVBaseInfo.h"
+#include "RISCVDisassembler.h"
+
+
+/* Need the feature infos define in
+ RISCVGenSubtargetInfo.inc. */
+#define GET_SUBTARGETINFO_ENUM
+#include "RISCVGenSubtargetInfo.inc"
+
+/* When we specify the RISCV64 mode, It means It is RV64IMAFD.
+ Similar, RISCV32 means RV32IMAFD.
+*/
+static uint64_t getFeatureBits(int mode)
+{
+ if (mode == CS_MODE_RISCV32)
+ // return b11110
+ return RISCV_FeatureStdExtM | RISCV_FeatureStdExtA |
+ RISCV_FeatureStdExtF | RISCV_FeatureStdExtD ;
+ else
+
+ // CS_MODE_RISCV64, return b11111
+ return RISCV_Feature64Bit | RISCV_FeatureStdExtM |
+ RISCV_FeatureStdExtA | RISCV_FeatureStdExtF |
+ RISCV_FeatureStdExtD ;
+}
+
+#define GET_REGINFO_ENUM
+#define GET_REGINFO_MC_DESC
+#include "RISCVGenRegisterInfo.inc"
+#define GET_INSTRINFO_ENUM
+#include "RISCVGenInstrInfo.inc"
+
+static const unsigned GPRDecoderTable[] = {
+ RISCV_X0, RISCV_X1, RISCV_X2, RISCV_X3,
+ RISCV_X4, RISCV_X5, RISCV_X6, RISCV_X7,
+ RISCV_X8, RISCV_X9, RISCV_X10, RISCV_X11,
+ RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15,
+ RISCV_X16, RISCV_X17, RISCV_X18, RISCV_X19,
+ RISCV_X20, RISCV_X21, RISCV_X22, RISCV_X23,
+ RISCV_X24, RISCV_X25, RISCV_X26, RISCV_X27,
+ RISCV_X28, RISCV_X29, RISCV_X30, RISCV_X31
+};
+
+static DecodeStatus DecodeGPRRegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address, const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > sizeof(GPRDecoderTable))
+ return MCDisassembler_Fail;
+
+ // We must define our own mapping from RegNo to register identifier.
+ // Accessing index RegNo in the register class will work in the case that
+ // registers were added in ascending order, but not in general.
+ Reg = GPRDecoderTable[RegNo];
+ //Inst.addOperand(MCOperand::createReg(Reg));
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+static const unsigned FPR32DecoderTable[] = {
+ RISCV_F0_32, RISCV_F1_32, RISCV_F2_32, RISCV_F3_32,
+ RISCV_F4_32, RISCV_F5_32, RISCV_F6_32, RISCV_F7_32,
+ RISCV_F8_32, RISCV_F9_32, RISCV_F10_32, RISCV_F11_32,
+ RISCV_F12_32, RISCV_F13_32, RISCV_F14_32, RISCV_F15_32,
+ RISCV_F16_32, RISCV_F17_32, RISCV_F18_32, RISCV_F19_32,
+ RISCV_F20_32, RISCV_F21_32, RISCV_F22_32, RISCV_F23_32,
+ RISCV_F24_32, RISCV_F25_32, RISCV_F26_32, RISCV_F27_32,
+ RISCV_F28_32, RISCV_F29_32, RISCV_F30_32, RISCV_F31_32
+};
+
+static DecodeStatus DecodeFPR32RegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address, const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > sizeof(FPR32DecoderTable))
+ return MCDisassembler_Fail;
+
+ // We must define our own mapping from RegNo to register identifier.
+ // Accessing index RegNo in the register class will work in the case that
+ // registers were added in ascending order, but not in general.
+ Reg = FPR32DecoderTable[RegNo];
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus DecodeFPR32CRegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address,
+ const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > 8)
+ return MCDisassembler_Fail;
+ Reg = FPR32DecoderTable[RegNo + 8];
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+static const unsigned FPR64DecoderTable[] = {
+ RISCV_F0_64, RISCV_F1_64, RISCV_F2_64, RISCV_F3_64,
+ RISCV_F4_64, RISCV_F5_64, RISCV_F6_64, RISCV_F7_64,
+ RISCV_F8_64, RISCV_F9_64, RISCV_F10_64, RISCV_F11_64,
+ RISCV_F12_64, RISCV_F13_64, RISCV_F14_64, RISCV_F15_64,
+ RISCV_F16_64, RISCV_F17_64, RISCV_F18_64, RISCV_F19_64,
+ RISCV_F20_64, RISCV_F21_64, RISCV_F22_64, RISCV_F23_64,
+ RISCV_F24_64, RISCV_F25_64, RISCV_F26_64, RISCV_F27_64,
+ RISCV_F28_64, RISCV_F29_64, RISCV_F30_64, RISCV_F31_64
+};
+
+static DecodeStatus DecodeFPR64RegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address, const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > sizeof(FPR64DecoderTable))
+ return MCDisassembler_Fail;
+
+ // We must define our own mapping from RegNo to register identifier.
+ // Accessing index RegNo in the register class will work in the case that
+ // registers were added in ascending order, but not in general.
+ Reg = FPR64DecoderTable[RegNo];
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus DecodeFPR64CRegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address,
+ const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > 8)
+ return MCDisassembler_Fail;
+ Reg = FPR64DecoderTable[RegNo + 8];
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus DecodeGPRNoX0RegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address,
+ const void *Decoder)
+{
+ if (RegNo == 0)
+ return MCDisassembler_Fail;
+ return DecodeGPRRegisterClass(Inst, RegNo, Address, Decoder);
+}
+
+static DecodeStatus DecodeGPRNoX0X2RegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address,
+ const void *Decoder)
+{
+ if (RegNo == 2)
+ return MCDisassembler_Fail;
+ return DecodeGPRNoX0RegisterClass(Inst, RegNo, Address, Decoder);
+}
+
+static DecodeStatus DecodeGPRCRegisterClass(MCInst *Inst, uint64_t RegNo,
+ uint64_t Address,
+ const void *Decoder)
+{
+ unsigned Reg = 0;
+
+ if (RegNo > 8)
+ return MCDisassembler_Fail;
+
+ Reg = GPRDecoderTable[RegNo + 8];
+ MCOperand_CreateReg0(Inst, Reg);
+ return MCDisassembler_Success;
+}
+
+// Add implied SP operand for instructions *SP compressed instructions. The SP
+// operand isn't explicitly encoded in the instruction.
+static void addImplySP(MCInst *Inst, int64_t Address, const void *Decoder)
+{
+ if (MCInst_getOpcode(Inst) == RISCV_C_LWSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_SWSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_LDSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_SDSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_FLWSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_FSWSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_FLDSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_FSDSP ||
+ MCInst_getOpcode(Inst) == RISCV_C_ADDI4SPN) {
+ DecodeGPRRegisterClass(Inst, 2, Address, Decoder);
+ }
+
+ if (MCInst_getOpcode(Inst) == RISCV_C_ADDI16SP) {
+ DecodeGPRRegisterClass(Inst, 2, Address, Decoder);
+ DecodeGPRRegisterClass(Inst, 2, Address, Decoder);
+ }
+}
+
+static DecodeStatus decodeUImmOperand(MCInst *Inst, uint64_t Imm,
+ int64_t Address, const void *Decoder,
+ unsigned N)
+{
+ //CS_ASSERT(isUInt<N>(Imm) && "Invalid immediate");
+ addImplySP(Inst, Address, Decoder);
+ //Inst.addOperand(MCOperand::createImm(Imm));
+ MCOperand_CreateImm0(Inst, Imm);
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus decodeUImmNonZeroOperand(MCInst *Inst, uint64_t Imm,
+ int64_t Address,
+ const void *Decoder,
+ unsigned N)
+{
+ if (Imm == 0)
+ return MCDisassembler_Fail;
+ return decodeUImmOperand(Inst, Imm, Address, Decoder, N);
+}
+
+static DecodeStatus decodeSImmOperand(MCInst *Inst, uint64_t Imm,
+ int64_t Address, const void *Decoder,
+ unsigned N)
+{
+ //CS_ASSERT(isUInt<N>(Imm) && "Invalid immediate");
+ addImplySP(Inst, Address, Decoder);
+ // Sign-extend the number in the bottom N bits of Imm
+ //Inst.addOperand(MCOperand::createImm(SignExtend64<N>(Imm)));
+ MCOperand_CreateImm0(Inst, SignExtend64(Imm, N));
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus decodeSImmNonZeroOperand(MCInst *Inst, uint64_t Imm,
+ int64_t Address,
+ const void *Decoder,
+ unsigned N)
+{
+ if (Imm == 0)
+ return MCDisassembler_Fail;
+ return decodeSImmOperand(Inst, Imm, Address, Decoder, N);
+}
+
+static DecodeStatus decodeSImmOperandAndLsl1(MCInst *Inst, uint64_t Imm,
+ int64_t Address,
+ const void *Decoder,
+ unsigned N)
+{
+ //CS_ASSERT(isUInt<N>(Imm) && "Invalid immediate");
+ // Sign-extend the number in the bottom N bits of Imm after accounting for
+ // the fact that the N bit immediate is stored in N-1 bits (the LSB is
+ // always zero)
+ //Inst.addOperand(MCOperand::createImm(SignExtend64<N>(Imm << 1)));
+ MCOperand_CreateImm0(Inst, SignExtend64(Imm << 1, N));
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus decodeCLUIImmOperand(MCInst *Inst, uint64_t Imm,
+ int64_t Address,
+ const void *Decoder)
+{
+ //CS_ASSERT(isUInt<6>(Imm) && "Invalid immediate");
+ if (Imm > 31) {
+ Imm = (SignExtend64(Imm, 6) & 0xfffff);
+ }
+ //Inst.addOperand(MCOperand::createImm(Imm));
+ MCOperand_CreateImm0(Inst, Imm);
+ return MCDisassembler_Success;
+}
+
+static DecodeStatus decodeFRMArg(MCInst *Inst, uint64_t Imm,
+ int64_t Address,
+ const void *Decoder)
+{
+ //CS_ASSERT(isUInt<3>(Imm) && "Invalid immediate");
+ if (!RISCVFPRndMode_isValidRoundingMode(Imm))
+ return MCDisassembler_Fail;
+
+ //Inst.addOperand(MCOperand::createImm(Imm));
+ MCOperand_CreateImm0(Inst, Imm);
+ return MCDisassembler_Success;
+}
+
+
+#include "RISCVGenDisassemblerTables.inc"
+
+static void init_MI_insn_detail(MCInst *MI)
+{
+ if (MI->flat_insn->detail) {
+ memset(MI->flat_insn->detail, 0, sizeof(cs_detail));
+ }
+
+ return;
+}
+
+// mark the load/store instructions through the opcode.
+static void markLSInsn(MCInst *MI, uint32_t in)
+{
+ /*
+ I ld 0000011 = 0x03
+ st 0100011 = 0x23
+ F/D ld 0000111 = 0x07
+ st 0100111 = 0x27
+ */
+#define MASK_LS_INSN 0x0000007f
+ uint32_t opcode = in & MASK_LS_INSN;
+ if (0 == (opcode ^ 0x03) || 0 == (opcode ^ 0x07) ||
+ 0 == (opcode ^ 0x23) || 0 == (opcode ^ 0x27))
+ MI->flat_insn->detail->riscv.need_effective_addr = true;
+#undef MASK_LS_INSN
+ return;
+}
+
+static DecodeStatus RISCVDisassembler_getInstruction(int mode, MCInst *MI,
+ const uint8_t *code, size_t code_len,
+ uint16_t *Size, uint64_t Address,
+ MCRegisterInfo *MRI)
+{
+ // TODO: This will need modification when supporting instruction set
+ // extensions with instructions > 32-bits (up to 176 bits wide).
+ uint32_t Inst = 0;
+ DecodeStatus Result;
+
+ // It's a 32 bit instruction if bit 0 and 1 are 1.
+ if ((code[0] & 0x3) == 0x3) {
+ if (code_len < 4) {
+ *Size = 0;
+ return MCDisassembler_Fail;
+ }
+
+ *Size = 4;
+ // Get the four bytes of the instruction.
+ //Encoded as little endian 32 bits.
+ Inst = code[0] | (code[1] << 8) | (code[2] << 16) | ((uint32_t)code[3] << 24);
+ init_MI_insn_detail(MI);
+ // Now we need mark what instruction need fix effective address output.
+ if (MI->csh->detail)
+ markLSInsn(MI, Inst);
+ Result = decodeInstruction(DecoderTable32, MI, Inst, Address, MRI, mode);
+ } else {
+ if (code_len < 2) {
+ *Size = 0;
+ return MCDisassembler_Fail;
+ }
+
+ // If not b4bit.
+ if (! (getFeatureBits(mode) & ((uint64_t)RISCV_Feature64Bit))) {
+ // Trying RISCV32Only_16 table (16-bit Instruction)
+ Inst = code[0] | (code[1] << 8);
+ init_MI_insn_detail(MI);
+ Result = decodeInstruction(DecoderTableRISCV32Only_16, MI, Inst, Address,
+ MRI, mode);
+ if (Result != MCDisassembler_Fail) {
+ *Size = 2;
+ return Result;
+ }
+ }
+
+ // Trying RISCV_C table (16-bit Instruction)
+ Inst = code[0] | (code[1] << 8);
+ init_MI_insn_detail(MI);
+ // Calling the auto-generated decoder function.
+ Result = decodeInstruction(DecoderTable16, MI, Inst, Address, MRI, mode);
+ *Size = 2;
+ }
+
+ return Result;
+}
+
+bool RISCV_getInstruction(csh ud, const uint8_t *code, size_t code_len,
+ MCInst *instr, uint16_t *size, uint64_t address,
+ void *info)
+{
+ cs_struct *handle = (cs_struct *)(uintptr_t)ud;
+
+ return MCDisassembler_Success ==
+ RISCVDisassembler_getInstruction(handle->mode, instr,
+ code, code_len,
+ size, address,
+ (MCRegisterInfo *)info);
+
+}
+
+void RISCV_init(MCRegisterInfo * MRI)
+{
+ /*
+ InitMCRegisterInfo(RISCVRegDesc, 97, RA, PC,
+ RISCVMCRegisterClasses, 11,
+ RISCVRegUnitRoots,
+ 64,
+ RISCVRegDiffLists,
+ RISCVLaneMaskLists,
+ RISCVRegStrings,
+ RISCVRegClassStrings,
+ RISCVSubRegIdxLists,
+ 2,
+ RISCVSubRegIdxRanges,
+ RISCVRegEncodingTable);
+ */
+
+ MCRegisterInfo_InitMCRegisterInfo(MRI, RISCVRegDesc, 97, 0, 0,
+ RISCVMCRegisterClasses, 11,
+ 0,
+ 0,
+ RISCVRegDiffLists,
+ 0,
+ RISCVSubRegIdxLists,
+ 2,
+ 0);
+}
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVDisassembler.h b/capstone/arch/RISCV/RISCVDisassembler.h
new file mode 100644
index 000000000..1cb70ea7c
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVDisassembler.h
@@ -0,0 +1,18 @@
+/* Capstone Disassembly Engine */
+/* RISC-V Backend By Rodrigo Cortes Porto <porto703@gmail.com> &
+ Shawn Chang <citypw@gmail.com>, HardenedLinux@2018 */
+
+#ifndef CS_RISCVDISASSEMBLER_H
+#define CS_RISCVDISASSEMBLER_H
+
+#include "../../include/capstone/capstone.h"
+#include "../../MCRegisterInfo.h"
+#include "../../MCInst.h"
+
+void RISCV_init(MCRegisterInfo *MRI);
+
+bool RISCV_getInstruction(csh ud, const uint8_t *code, size_t code_len,
+ MCInst *instr, uint16_t *size, uint64_t address,
+ void *info);
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVGenAsmWriter.inc b/capstone/arch/RISCV/RISCVGenAsmWriter.inc
new file mode 100644
index 000000000..220dd8ee9
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenAsmWriter.inc
@@ -0,0 +1,2651 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Assembly Writer Source Fragment *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+/* Capstone Disassembly Engine */
+/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
+
+#include <stdio.h> // debug
+#include <capstone/platform.h>
+#include <assert.h>
+
+
+/// printInstruction - This method is automatically generated by tablegen
+/// from the instruction set description.
+static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI)
+{
+#ifndef CAPSTONE_DIET
+ static const char AsmStrs[] = {
+ /* 0 */ 'l', 'l', 'a', 9, 0,
+ /* 5 */ 's', 'f', 'e', 'n', 'c', 'e', '.', 'v', 'm', 'a', 9, 0,
+ /* 17 */ 's', 'r', 'a', 9, 0,
+ /* 22 */ 'l', 'b', 9, 0,
+ /* 26 */ 's', 'b', 9, 0,
+ /* 30 */ 'c', '.', 's', 'u', 'b', 9, 0,
+ /* 37 */ 'a', 'u', 'i', 'p', 'c', 9, 0,
+ /* 44 */ 'c', 's', 'r', 'r', 'c', 9, 0,
+ /* 51 */ 'f', 's', 'u', 'b', '.', 'd', 9, 0,
+ /* 59 */ 'f', 'm', 's', 'u', 'b', '.', 'd', 9, 0,
+ /* 68 */ 'f', 'n', 'm', 's', 'u', 'b', '.', 'd', 9, 0,
+ /* 78 */ 's', 'c', '.', 'd', 9, 0,
+ /* 84 */ 'f', 'a', 'd', 'd', '.', 'd', 9, 0,
+ /* 92 */ 'f', 'm', 'a', 'd', 'd', '.', 'd', 9, 0,
+ /* 101 */ 'f', 'n', 'm', 'a', 'd', 'd', '.', 'd', 9, 0,
+ /* 111 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'd', 9, 0,
+ /* 121 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'd', 9, 0,
+ /* 131 */ 'f', 'l', 'e', '.', 'd', 9, 0,
+ /* 138 */ 'f', 's', 'g', 'n', 'j', '.', 'd', 9, 0,
+ /* 147 */ 'f', 'c', 'v', 't', '.', 'l', '.', 'd', 9, 0,
+ /* 157 */ 'f', 'm', 'u', 'l', '.', 'd', 9, 0,
+ /* 165 */ 'f', 'm', 'i', 'n', '.', 'd', 9, 0,
+ /* 173 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'd', 9, 0,
+ /* 183 */ 'f', 's', 'g', 'n', 'j', 'n', '.', 'd', 9, 0,
+ /* 193 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'd', 9, 0,
+ /* 204 */ 'f', 'e', 'q', '.', 'd', 9, 0,
+ /* 211 */ 'l', 'r', '.', 'd', 9, 0,
+ /* 217 */ 'a', 'm', 'o', 'o', 'r', '.', 'd', 9, 0,
+ /* 226 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'd', 9, 0,
+ /* 236 */ 'f', 'c', 'v', 't', '.', 's', '.', 'd', 9, 0,
+ /* 246 */ 'f', 'c', 'l', 'a', 's', 's', '.', 'd', 9, 0,
+ /* 256 */ 'f', 'l', 't', '.', 'd', 9, 0,
+ /* 263 */ 'f', 's', 'q', 'r', 't', '.', 'd', 9, 0,
+ /* 272 */ 'f', 'c', 'v', 't', '.', 'l', 'u', '.', 'd', 9, 0,
+ /* 283 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'd', 9, 0,
+ /* 294 */ 'f', 'c', 'v', 't', '.', 'w', 'u', '.', 'd', 9, 0,
+ /* 305 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'd', 9, 0,
+ /* 316 */ 'f', 'd', 'i', 'v', '.', 'd', 9, 0,
+ /* 324 */ 'f', 'c', 'v', 't', '.', 'w', '.', 'd', 9, 0,
+ /* 334 */ 'f', 'm', 'v', '.', 'x', '.', 'd', 9, 0,
+ /* 343 */ 'f', 'm', 'a', 'x', '.', 'd', 9, 0,
+ /* 351 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'd', 9, 0,
+ /* 361 */ 'f', 's', 'g', 'n', 'j', 'x', '.', 'd', 9, 0,
+ /* 371 */ 'c', '.', 'a', 'd', 'd', 9, 0,
+ /* 378 */ 'c', '.', 'l', 'd', 9, 0,
+ /* 384 */ 'c', '.', 'f', 'l', 'd', 9, 0,
+ /* 391 */ 'c', '.', 'a', 'n', 'd', 9, 0,
+ /* 398 */ 'c', '.', 's', 'd', 9, 0,
+ /* 404 */ 'c', '.', 'f', 's', 'd', 9, 0,
+ /* 411 */ 'f', 'e', 'n', 'c', 'e', 9, 0,
+ /* 418 */ 'b', 'g', 'e', 9, 0,
+ /* 423 */ 'b', 'n', 'e', 9, 0,
+ /* 428 */ 'm', 'u', 'l', 'h', 9, 0,
+ /* 434 */ 's', 'h', 9, 0,
+ /* 438 */ 'f', 'e', 'n', 'c', 'e', '.', 'i', 9, 0,
+ /* 447 */ 'c', '.', 's', 'r', 'a', 'i', 9, 0,
+ /* 455 */ 'c', 's', 'r', 'r', 'c', 'i', 9, 0,
+ /* 463 */ 'c', '.', 'a', 'd', 'd', 'i', 9, 0,
+ /* 471 */ 'c', '.', 'a', 'n', 'd', 'i', 9, 0,
+ /* 479 */ 'w', 'f', 'i', 9, 0,
+ /* 484 */ 'c', '.', 'l', 'i', 9, 0,
+ /* 490 */ 'c', '.', 's', 'l', 'l', 'i', 9, 0,
+ /* 498 */ 'c', '.', 's', 'r', 'l', 'i', 9, 0,
+ /* 506 */ 'x', 'o', 'r', 'i', 9, 0,
+ /* 512 */ 'c', 's', 'r', 'r', 's', 'i', 9, 0,
+ /* 520 */ 's', 'l', 't', 'i', 9, 0,
+ /* 526 */ 'c', '.', 'l', 'u', 'i', 9, 0,
+ /* 533 */ 'c', 's', 'r', 'r', 'w', 'i', 9, 0,
+ /* 541 */ 'c', '.', 'j', 9, 0,
+ /* 546 */ 'c', '.', 'e', 'b', 'r', 'e', 'a', 'k', 9, 0,
+ /* 556 */ 'f', 'c', 'v', 't', '.', 'd', '.', 'l', 9, 0,
+ /* 566 */ 'f', 'c', 'v', 't', '.', 's', '.', 'l', 9, 0,
+ /* 576 */ 'c', '.', 'j', 'a', 'l', 9, 0,
+ /* 583 */ 't', 'a', 'i', 'l', 9, 0,
+ /* 589 */ 'e', 'c', 'a', 'l', 'l', 9, 0,
+ /* 596 */ 's', 'l', 'l', 9, 0,
+ /* 601 */ 's', 'c', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 610 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 623 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 636 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 649 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 663 */ 'l', 'r', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 672 */ 'a', 'm', 'o', 'o', 'r', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 684 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 697 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 711 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 725 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'd', '.', 'r', 'l', 9, 0,
+ /* 738 */ 's', 'c', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 747 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 760 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 773 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 786 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 800 */ 'l', 'r', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 809 */ 'a', 'm', 'o', 'o', 'r', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 821 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 834 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 848 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 862 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'w', '.', 'r', 'l', 9, 0,
+ /* 875 */ 's', 'c', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 886 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 901 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 916 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 931 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 947 */ 'l', 'r', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 958 */ 'a', 'm', 'o', 'o', 'r', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 972 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 987 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1003 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1019 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'd', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1034 */ 's', 'c', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1045 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1060 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1075 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1090 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1106 */ 'l', 'r', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1117 */ 'a', 'm', 'o', 'o', 'r', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1131 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1146 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1162 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1178 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'w', '.', 'a', 'q', 'r', 'l', 9, 0,
+ /* 1193 */ 's', 'r', 'l', 9, 0,
+ /* 1198 */ 'm', 'u', 'l', 9, 0,
+ /* 1203 */ 'r', 'e', 'm', 9, 0,
+ /* 1208 */ 'c', '.', 'a', 'd', 'd', 'i', '4', 's', 'p', 'n', 9, 0,
+ /* 1220 */ 'f', 'e', 'n', 'c', 'e', '.', 't', 's', 'o', 9, 0,
+ /* 1231 */ 'c', '.', 'u', 'n', 'i', 'm', 'p', 9, 0,
+ /* 1240 */ 'c', '.', 'n', 'o', 'p', 9, 0,
+ /* 1247 */ 'c', '.', 'a', 'd', 'd', 'i', '1', '6', 's', 'p', 9, 0,
+ /* 1259 */ 'c', '.', 'l', 'd', 's', 'p', 9, 0,
+ /* 1267 */ 'c', '.', 'f', 'l', 'd', 's', 'p', 9, 0,
+ /* 1276 */ 'c', '.', 's', 'd', 's', 'p', 9, 0,
+ /* 1284 */ 'c', '.', 'f', 's', 'd', 's', 'p', 9, 0,
+ /* 1293 */ 'c', '.', 'l', 'w', 's', 'p', 9, 0,
+ /* 1301 */ 'c', '.', 'f', 'l', 'w', 's', 'p', 9, 0,
+ /* 1310 */ 'c', '.', 's', 'w', 's', 'p', 9, 0,
+ /* 1318 */ 'c', '.', 'f', 's', 'w', 's', 'p', 9, 0,
+ /* 1327 */ 's', 'c', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1336 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1349 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1362 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1375 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1389 */ 'l', 'r', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1398 */ 'a', 'm', 'o', 'o', 'r', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1410 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1423 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1437 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1451 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'd', '.', 'a', 'q', 9, 0,
+ /* 1464 */ 's', 'c', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1473 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1486 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1499 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1512 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1526 */ 'l', 'r', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1535 */ 'a', 'm', 'o', 'o', 'r', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1547 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1560 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1574 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1588 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'w', '.', 'a', 'q', 9, 0,
+ /* 1601 */ 'b', 'e', 'q', 9, 0,
+ /* 1606 */ 'c', '.', 'j', 'r', 9, 0,
+ /* 1612 */ 'c', '.', 'j', 'a', 'l', 'r', 9, 0,
+ /* 1620 */ 'c', '.', 'o', 'r', 9, 0,
+ /* 1626 */ 'c', '.', 'x', 'o', 'r', 9, 0,
+ /* 1633 */ 'f', 's', 'u', 'b', '.', 's', 9, 0,
+ /* 1641 */ 'f', 'm', 's', 'u', 'b', '.', 's', 9, 0,
+ /* 1650 */ 'f', 'n', 'm', 's', 'u', 'b', '.', 's', 9, 0,
+ /* 1660 */ 'f', 'c', 'v', 't', '.', 'd', '.', 's', 9, 0,
+ /* 1670 */ 'f', 'a', 'd', 'd', '.', 's', 9, 0,
+ /* 1678 */ 'f', 'm', 'a', 'd', 'd', '.', 's', 9, 0,
+ /* 1687 */ 'f', 'n', 'm', 'a', 'd', 'd', '.', 's', 9, 0,
+ /* 1697 */ 'f', 'l', 'e', '.', 's', 9, 0,
+ /* 1704 */ 'f', 's', 'g', 'n', 'j', '.', 's', 9, 0,
+ /* 1713 */ 'f', 'c', 'v', 't', '.', 'l', '.', 's', 9, 0,
+ /* 1723 */ 'f', 'm', 'u', 'l', '.', 's', 9, 0,
+ /* 1731 */ 'f', 'm', 'i', 'n', '.', 's', 9, 0,
+ /* 1739 */ 'f', 's', 'g', 'n', 'j', 'n', '.', 's', 9, 0,
+ /* 1749 */ 'f', 'e', 'q', '.', 's', 9, 0,
+ /* 1756 */ 'f', 'c', 'l', 'a', 's', 's', '.', 's', 9, 0,
+ /* 1766 */ 'f', 'l', 't', '.', 's', 9, 0,
+ /* 1773 */ 'f', 's', 'q', 'r', 't', '.', 's', 9, 0,
+ /* 1782 */ 'f', 'c', 'v', 't', '.', 'l', 'u', '.', 's', 9, 0,
+ /* 1793 */ 'f', 'c', 'v', 't', '.', 'w', 'u', '.', 's', 9, 0,
+ /* 1804 */ 'f', 'd', 'i', 'v', '.', 's', 9, 0,
+ /* 1812 */ 'f', 'c', 'v', 't', '.', 'w', '.', 's', 9, 0,
+ /* 1822 */ 'f', 'm', 'a', 'x', '.', 's', 9, 0,
+ /* 1830 */ 'f', 's', 'g', 'n', 'j', 'x', '.', 's', 9, 0,
+ /* 1840 */ 'c', 's', 'r', 'r', 's', 9, 0,
+ /* 1847 */ 'm', 'r', 'e', 't', 9, 0,
+ /* 1853 */ 's', 'r', 'e', 't', 9, 0,
+ /* 1859 */ 'u', 'r', 'e', 't', 9, 0,
+ /* 1865 */ 'b', 'l', 't', 9, 0,
+ /* 1870 */ 's', 'l', 't', 9, 0,
+ /* 1875 */ 'l', 'b', 'u', 9, 0,
+ /* 1880 */ 'b', 'g', 'e', 'u', 9, 0,
+ /* 1886 */ 'm', 'u', 'l', 'h', 'u', 9, 0,
+ /* 1893 */ 's', 'l', 't', 'i', 'u', 9, 0,
+ /* 1900 */ 'f', 'c', 'v', 't', '.', 'd', '.', 'l', 'u', 9, 0,
+ /* 1911 */ 'f', 'c', 'v', 't', '.', 's', '.', 'l', 'u', 9, 0,
+ /* 1922 */ 'r', 'e', 'm', 'u', 9, 0,
+ /* 1928 */ 'm', 'u', 'l', 'h', 's', 'u', 9, 0,
+ /* 1936 */ 'b', 'l', 't', 'u', 9, 0,
+ /* 1942 */ 's', 'l', 't', 'u', 9, 0,
+ /* 1948 */ 'd', 'i', 'v', 'u', 9, 0,
+ /* 1954 */ 'f', 'c', 'v', 't', '.', 'd', '.', 'w', 'u', 9, 0,
+ /* 1965 */ 'f', 'c', 'v', 't', '.', 's', '.', 'w', 'u', 9, 0,
+ /* 1976 */ 'l', 'w', 'u', 9, 0,
+ /* 1981 */ 'd', 'i', 'v', 9, 0,
+ /* 1986 */ 'c', '.', 'm', 'v', 9, 0,
+ /* 1992 */ 's', 'c', '.', 'w', 9, 0,
+ /* 1998 */ 'f', 'c', 'v', 't', '.', 'd', '.', 'w', 9, 0,
+ /* 2008 */ 'a', 'm', 'o', 'a', 'd', 'd', '.', 'w', 9, 0,
+ /* 2018 */ 'a', 'm', 'o', 'a', 'n', 'd', '.', 'w', 9, 0,
+ /* 2028 */ 'a', 'm', 'o', 'm', 'i', 'n', '.', 'w', 9, 0,
+ /* 2038 */ 'a', 'm', 'o', 's', 'w', 'a', 'p', '.', 'w', 9, 0,
+ /* 2049 */ 'l', 'r', '.', 'w', 9, 0,
+ /* 2055 */ 'a', 'm', 'o', 'o', 'r', '.', 'w', 9, 0,
+ /* 2064 */ 'a', 'm', 'o', 'x', 'o', 'r', '.', 'w', 9, 0,
+ /* 2074 */ 'f', 'c', 'v', 't', '.', 's', '.', 'w', 9, 0,
+ /* 2084 */ 'a', 'm', 'o', 'm', 'i', 'n', 'u', '.', 'w', 9, 0,
+ /* 2095 */ 'a', 'm', 'o', 'm', 'a', 'x', 'u', '.', 'w', 9, 0,
+ /* 2106 */ 'f', 'm', 'v', '.', 'x', '.', 'w', 9, 0,
+ /* 2115 */ 'a', 'm', 'o', 'm', 'a', 'x', '.', 'w', 9, 0,
+ /* 2125 */ 's', 'r', 'a', 'w', 9, 0,
+ /* 2131 */ 'c', '.', 's', 'u', 'b', 'w', 9, 0,
+ /* 2139 */ 'c', '.', 'a', 'd', 'd', 'w', 9, 0,
+ /* 2147 */ 's', 'r', 'a', 'i', 'w', 9, 0,
+ /* 2154 */ 'c', '.', 'a', 'd', 'd', 'i', 'w', 9, 0,
+ /* 2163 */ 's', 'l', 'l', 'i', 'w', 9, 0,
+ /* 2170 */ 's', 'r', 'l', 'i', 'w', 9, 0,
+ /* 2177 */ 'c', '.', 'l', 'w', 9, 0,
+ /* 2183 */ 'c', '.', 'f', 'l', 'w', 9, 0,
+ /* 2190 */ 's', 'l', 'l', 'w', 9, 0,
+ /* 2196 */ 's', 'r', 'l', 'w', 9, 0,
+ /* 2202 */ 'm', 'u', 'l', 'w', 9, 0,
+ /* 2208 */ 'r', 'e', 'm', 'w', 9, 0,
+ /* 2214 */ 'c', 's', 'r', 'r', 'w', 9, 0,
+ /* 2221 */ 'c', '.', 's', 'w', 9, 0,
+ /* 2227 */ 'c', '.', 'f', 's', 'w', 9, 0,
+ /* 2234 */ 'r', 'e', 'm', 'u', 'w', 9, 0,
+ /* 2241 */ 'd', 'i', 'v', 'u', 'w', 9, 0,
+ /* 2248 */ 'd', 'i', 'v', 'w', 9, 0,
+ /* 2254 */ 'f', 'm', 'v', '.', 'd', '.', 'x', 9, 0,
+ /* 2263 */ 'f', 'm', 'v', '.', 'w', '.', 'x', 9, 0,
+ /* 2272 */ 'c', '.', 'b', 'n', 'e', 'z', 9, 0,
+ /* 2280 */ 'c', '.', 'b', 'e', 'q', 'z', 9, 0,
+ /* 2288 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'P', 'a', 't', 'c', 'h', 'a', 'b', 'l', 'e', 32, 'R', 'E', 'T', '.', 0,
+ /* 2319 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'y', 'p', 'e', 'd', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
+ /* 2343 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'C', 'u', 's', 't', 'o', 'm', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
+ /* 2368 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'n', 't', 'e', 'r', '.', 0,
+ /* 2391 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'a', 'i', 'l', 32, 'C', 'a', 'l', 'l', 32, 'E', 'x', 'i', 't', '.', 0,
+ /* 2414 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'x', 'i', 't', '.', 0,
+ /* 2436 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
+ /* 2449 */ 'B', 'U', 'N', 'D', 'L', 'E', 0,
+ /* 2456 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
+ /* 2466 */ 'D', 'B', 'G', '_', 'L', 'A', 'B', 'E', 'L', 0,
+ /* 2476 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
+ /* 2491 */ '#', 32, 'F', 'E', 'n', 't', 'r', 'y', 32, 'c', 'a', 'l', 'l', 0,
+ };
+#endif
+
+ static const uint16_t OpInfo0[] = {
+ 0U, // PHI
+ 0U, // INLINEASM
+ 0U, // INLINEASM_BR
+ 0U, // CFI_INSTRUCTION
+ 0U, // EH_LABEL
+ 0U, // GC_LABEL
+ 0U, // ANNOTATION_LABEL
+ 0U, // KILL
+ 0U, // EXTRACT_SUBREG
+ 0U, // INSERT_SUBREG
+ 0U, // IMPLICIT_DEF
+ 0U, // SUBREG_TO_REG
+ 0U, // COPY_TO_REGCLASS
+ 2457U, // DBG_VALUE
+ 2467U, // DBG_LABEL
+ 0U, // REG_SEQUENCE
+ 0U, // COPY
+ 2450U, // BUNDLE
+ 2477U, // LIFETIME_START
+ 2437U, // LIFETIME_END
+ 0U, // STACKMAP
+ 2492U, // FENTRY_CALL
+ 0U, // PATCHPOINT
+ 0U, // LOAD_STACK_GUARD
+ 0U, // STATEPOINT
+ 0U, // LOCAL_ESCAPE
+ 0U, // FAULTING_OP
+ 0U, // PATCHABLE_OP
+ 2369U, // PATCHABLE_FUNCTION_ENTER
+ 2289U, // PATCHABLE_RET
+ 2415U, // PATCHABLE_FUNCTION_EXIT
+ 2392U, // PATCHABLE_TAIL_CALL
+ 2344U, // PATCHABLE_EVENT_CALL
+ 2320U, // PATCHABLE_TYPED_EVENT_CALL
+ 0U, // ICALL_BRANCH_FUNNEL
+ 0U, // G_ADD
+ 0U, // G_SUB
+ 0U, // G_MUL
+ 0U, // G_SDIV
+ 0U, // G_UDIV
+ 0U, // G_SREM
+ 0U, // G_UREM
+ 0U, // G_AND
+ 0U, // G_OR
+ 0U, // G_XOR
+ 0U, // G_IMPLICIT_DEF
+ 0U, // G_PHI
+ 0U, // G_FRAME_INDEX
+ 0U, // G_GLOBAL_VALUE
+ 0U, // G_EXTRACT
+ 0U, // G_UNMERGE_VALUES
+ 0U, // G_INSERT
+ 0U, // G_MERGE_VALUES
+ 0U, // G_BUILD_VECTOR
+ 0U, // G_BUILD_VECTOR_TRUNC
+ 0U, // G_CONCAT_VECTORS
+ 0U, // G_PTRTOINT
+ 0U, // G_INTTOPTR
+ 0U, // G_BITCAST
+ 0U, // G_INTRINSIC_TRUNC
+ 0U, // G_INTRINSIC_ROUND
+ 0U, // G_LOAD
+ 0U, // G_SEXTLOAD
+ 0U, // G_ZEXTLOAD
+ 0U, // G_STORE
+ 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
+ 0U, // G_ATOMIC_CMPXCHG
+ 0U, // G_ATOMICRMW_XCHG
+ 0U, // G_ATOMICRMW_ADD
+ 0U, // G_ATOMICRMW_SUB
+ 0U, // G_ATOMICRMW_AND
+ 0U, // G_ATOMICRMW_NAND
+ 0U, // G_ATOMICRMW_OR
+ 0U, // G_ATOMICRMW_XOR
+ 0U, // G_ATOMICRMW_MAX
+ 0U, // G_ATOMICRMW_MIN
+ 0U, // G_ATOMICRMW_UMAX
+ 0U, // G_ATOMICRMW_UMIN
+ 0U, // G_BRCOND
+ 0U, // G_BRINDIRECT
+ 0U, // G_INTRINSIC
+ 0U, // G_INTRINSIC_W_SIDE_EFFECTS
+ 0U, // G_ANYEXT
+ 0U, // G_TRUNC
+ 0U, // G_CONSTANT
+ 0U, // G_FCONSTANT
+ 0U, // G_VASTART
+ 0U, // G_VAARG
+ 0U, // G_SEXT
+ 0U, // G_ZEXT
+ 0U, // G_SHL
+ 0U, // G_LSHR
+ 0U, // G_ASHR
+ 0U, // G_ICMP
+ 0U, // G_FCMP
+ 0U, // G_SELECT
+ 0U, // G_UADDO
+ 0U, // G_UADDE
+ 0U, // G_USUBO
+ 0U, // G_USUBE
+ 0U, // G_SADDO
+ 0U, // G_SADDE
+ 0U, // G_SSUBO
+ 0U, // G_SSUBE
+ 0U, // G_UMULO
+ 0U, // G_SMULO
+ 0U, // G_UMULH
+ 0U, // G_SMULH
+ 0U, // G_FADD
+ 0U, // G_FSUB
+ 0U, // G_FMUL
+ 0U, // G_FMA
+ 0U, // G_FDIV
+ 0U, // G_FREM
+ 0U, // G_FPOW
+ 0U, // G_FEXP
+ 0U, // G_FEXP2
+ 0U, // G_FLOG
+ 0U, // G_FLOG2
+ 0U, // G_FLOG10
+ 0U, // G_FNEG
+ 0U, // G_FPEXT
+ 0U, // G_FPTRUNC
+ 0U, // G_FPTOSI
+ 0U, // G_FPTOUI
+ 0U, // G_SITOFP
+ 0U, // G_UITOFP
+ 0U, // G_FABS
+ 0U, // G_FCANONICALIZE
+ 0U, // G_GEP
+ 0U, // G_PTR_MASK
+ 0U, // G_BR
+ 0U, // G_INSERT_VECTOR_ELT
+ 0U, // G_EXTRACT_VECTOR_ELT
+ 0U, // G_SHUFFLE_VECTOR
+ 0U, // G_CTTZ
+ 0U, // G_CTTZ_ZERO_UNDEF
+ 0U, // G_CTLZ
+ 0U, // G_CTLZ_ZERO_UNDEF
+ 0U, // G_CTPOP
+ 0U, // G_BSWAP
+ 0U, // G_FCEIL
+ 0U, // G_FCOS
+ 0U, // G_FSIN
+ 0U, // G_FSQRT
+ 0U, // G_FFLOOR
+ 0U, // G_ADDRSPACE_CAST
+ 0U, // G_BLOCK_ADDR
+ 4U, // ADJCALLSTACKDOWN
+ 4U, // ADJCALLSTACKUP
+ 4U, // BuildPairF64Pseudo
+ 4U, // PseudoAtomicLoadNand32
+ 4U, // PseudoAtomicLoadNand64
+ 4U, // PseudoBR
+ 4U, // PseudoBRIND
+ 4687U, // PseudoCALL
+ 4U, // PseudoCALLIndirect
+ 4U, // PseudoCmpXchg32
+ 4U, // PseudoCmpXchg64
+ 20482U, // PseudoLA
+ 20967U, // PseudoLI
+ 20481U, // PseudoLLA
+ 4U, // PseudoMaskedAtomicLoadAdd32
+ 4U, // PseudoMaskedAtomicLoadMax32
+ 4U, // PseudoMaskedAtomicLoadMin32
+ 4U, // PseudoMaskedAtomicLoadNand32
+ 4U, // PseudoMaskedAtomicLoadSub32
+ 4U, // PseudoMaskedAtomicLoadUMax32
+ 4U, // PseudoMaskedAtomicLoadUMin32
+ 4U, // PseudoMaskedAtomicSwap32
+ 4U, // PseudoMaskedCmpXchg32
+ 4U, // PseudoRET
+ 4680U, // PseudoTAIL
+ 4U, // PseudoTAILIndirect
+ 4U, // Select_FPR32_Using_CC_GPR
+ 4U, // Select_FPR64_Using_CC_GPR
+ 4U, // Select_GPR_Using_CC_GPR
+ 4U, // SplitF64Pseudo
+ 20854U, // ADD
+ 20946U, // ADDI
+ 22637U, // ADDIW
+ 22622U, // ADDW
+ 20592U, // AMOADD_D
+ 21817U, // AMOADD_D_AQ
+ 21367U, // AMOADD_D_AQ_RL
+ 21091U, // AMOADD_D_RL
+ 22489U, // AMOADD_W
+ 21954U, // AMOADD_W_AQ
+ 21526U, // AMOADD_W_AQ_RL
+ 21228U, // AMOADD_W_RL
+ 20602U, // AMOAND_D
+ 21830U, // AMOAND_D_AQ
+ 21382U, // AMOAND_D_AQ_RL
+ 21104U, // AMOAND_D_RL
+ 22499U, // AMOAND_W
+ 21967U, // AMOAND_W_AQ
+ 21541U, // AMOAND_W_AQ_RL
+ 21241U, // AMOAND_W_RL
+ 20786U, // AMOMAXU_D
+ 21918U, // AMOMAXU_D_AQ
+ 21484U, // AMOMAXU_D_AQ_RL
+ 21192U, // AMOMAXU_D_RL
+ 22576U, // AMOMAXU_W
+ 22055U, // AMOMAXU_W_AQ
+ 21643U, // AMOMAXU_W_AQ_RL
+ 21329U, // AMOMAXU_W_RL
+ 20832U, // AMOMAX_D
+ 21932U, // AMOMAX_D_AQ
+ 21500U, // AMOMAX_D_AQ_RL
+ 21206U, // AMOMAX_D_RL
+ 22596U, // AMOMAX_W
+ 22069U, // AMOMAX_W_AQ
+ 21659U, // AMOMAX_W_AQ_RL
+ 21343U, // AMOMAX_W_RL
+ 20764U, // AMOMINU_D
+ 21904U, // AMOMINU_D_AQ
+ 21468U, // AMOMINU_D_AQ_RL
+ 21178U, // AMOMINU_D_RL
+ 22565U, // AMOMINU_W
+ 22041U, // AMOMINU_W_AQ
+ 21627U, // AMOMINU_W_AQ_RL
+ 21315U, // AMOMINU_W_RL
+ 20654U, // AMOMIN_D
+ 21843U, // AMOMIN_D_AQ
+ 21397U, // AMOMIN_D_AQ_RL
+ 21117U, // AMOMIN_D_RL
+ 22509U, // AMOMIN_W
+ 21980U, // AMOMIN_W_AQ
+ 21556U, // AMOMIN_W_AQ_RL
+ 21254U, // AMOMIN_W_RL
+ 20698U, // AMOOR_D
+ 21879U, // AMOOR_D_AQ
+ 21439U, // AMOOR_D_AQ_RL
+ 21153U, // AMOOR_D_RL
+ 22536U, // AMOOR_W
+ 22016U, // AMOOR_W_AQ
+ 21598U, // AMOOR_W_AQ_RL
+ 21290U, // AMOOR_W_RL
+ 20674U, // AMOSWAP_D
+ 21856U, // AMOSWAP_D_AQ
+ 21412U, // AMOSWAP_D_AQ_RL
+ 21130U, // AMOSWAP_D_RL
+ 22519U, // AMOSWAP_W
+ 21993U, // AMOSWAP_W_AQ
+ 21571U, // AMOSWAP_W_AQ_RL
+ 21267U, // AMOSWAP_W_RL
+ 20707U, // AMOXOR_D
+ 21891U, // AMOXOR_D_AQ
+ 21453U, // AMOXOR_D_AQ_RL
+ 21165U, // AMOXOR_D_RL
+ 22545U, // AMOXOR_W
+ 22028U, // AMOXOR_W_AQ
+ 21612U, // AMOXOR_W_AQ_RL
+ 21302U, // AMOXOR_W_RL
+ 20874U, // AND
+ 20954U, // ANDI
+ 20518U, // AUIPC
+ 22082U, // BEQ
+ 20899U, // BGE
+ 22361U, // BGEU
+ 22346U, // BLT
+ 22417U, // BLTU
+ 20904U, // BNE
+ 20525U, // CSRRC
+ 20936U, // CSRRCI
+ 22321U, // CSRRS
+ 20993U, // CSRRSI
+ 22695U, // CSRRW
+ 21014U, // CSRRWI
+ 8564U, // C_ADD
+ 8656U, // C_ADDI
+ 9440U, // C_ADDI16SP
+ 21689U, // C_ADDI4SPN
+ 10347U, // C_ADDIW
+ 10332U, // C_ADDW
+ 8584U, // C_AND
+ 8664U, // C_ANDI
+ 22761U, // C_BEQZ
+ 22753U, // C_BNEZ
+ 547U, // C_EBREAK
+ 20865U, // C_FLD
+ 21748U, // C_FLDSP
+ 22664U, // C_FLW
+ 21782U, // C_FLWSP
+ 20885U, // C_FSD
+ 21765U, // C_FSDSP
+ 22708U, // C_FSW
+ 21799U, // C_FSWSP
+ 4638U, // C_J
+ 4673U, // C_JAL
+ 5709U, // C_JALR
+ 5703U, // C_JR
+ 20859U, // C_LD
+ 21740U, // C_LDSP
+ 20965U, // C_LI
+ 21007U, // C_LUI
+ 22658U, // C_LW
+ 21774U, // C_LWSP
+ 22467U, // C_MV
+ 1241U, // C_NOP
+ 9813U, // C_OR
+ 20879U, // C_SD
+ 21757U, // C_SDSP
+ 8683U, // C_SLLI
+ 8640U, // C_SRAI
+ 8691U, // C_SRLI
+ 8223U, // C_SUB
+ 10324U, // C_SUBW
+ 22702U, // C_SW
+ 21791U, // C_SWSP
+ 1232U, // C_UNIMP
+ 9819U, // C_XOR
+ 22462U, // DIV
+ 22429U, // DIVU
+ 22722U, // DIVUW
+ 22729U, // DIVW
+ 549U, // EBREAK
+ 590U, // ECALL
+ 20565U, // FADD_D
+ 22151U, // FADD_S
+ 20727U, // FCLASS_D
+ 22237U, // FCLASS_S
+ 21037U, // FCVT_D_L
+ 22381U, // FCVT_D_LU
+ 22141U, // FCVT_D_S
+ 22479U, // FCVT_D_W
+ 22435U, // FCVT_D_WU
+ 20753U, // FCVT_LU_D
+ 22263U, // FCVT_LU_S
+ 20628U, // FCVT_L_D
+ 22194U, // FCVT_L_S
+ 20717U, // FCVT_S_D
+ 21047U, // FCVT_S_L
+ 22392U, // FCVT_S_LU
+ 22555U, // FCVT_S_W
+ 22446U, // FCVT_S_WU
+ 20775U, // FCVT_WU_D
+ 22274U, // FCVT_WU_S
+ 20805U, // FCVT_W_D
+ 22293U, // FCVT_W_S
+ 20797U, // FDIV_D
+ 22285U, // FDIV_S
+ 12700U, // FENCE
+ 439U, // FENCE_I
+ 1221U, // FENCE_TSO
+ 20685U, // FEQ_D
+ 22230U, // FEQ_S
+ 20867U, // FLD
+ 20612U, // FLE_D
+ 22178U, // FLE_S
+ 20737U, // FLT_D
+ 22247U, // FLT_S
+ 22666U, // FLW
+ 20573U, // FMADD_D
+ 22159U, // FMADD_S
+ 20824U, // FMAX_D
+ 22303U, // FMAX_S
+ 20646U, // FMIN_D
+ 22212U, // FMIN_S
+ 20540U, // FMSUB_D
+ 22122U, // FMSUB_S
+ 20638U, // FMUL_D
+ 22204U, // FMUL_S
+ 22735U, // FMV_D_X
+ 22744U, // FMV_W_X
+ 20815U, // FMV_X_D
+ 22587U, // FMV_X_W
+ 20582U, // FNMADD_D
+ 22168U, // FNMADD_S
+ 20549U, // FNMSUB_D
+ 22131U, // FNMSUB_S
+ 20887U, // FSD
+ 20664U, // FSGNJN_D
+ 22220U, // FSGNJN_S
+ 20842U, // FSGNJX_D
+ 22311U, // FSGNJX_S
+ 20619U, // FSGNJ_D
+ 22185U, // FSGNJ_S
+ 20744U, // FSQRT_D
+ 22254U, // FSQRT_S
+ 20532U, // FSUB_D
+ 22114U, // FSUB_S
+ 22710U, // FSW
+ 21059U, // JAL
+ 22095U, // JALR
+ 20503U, // LB
+ 22356U, // LBU
+ 20861U, // LD
+ 20911U, // LH
+ 22369U, // LHU
+ 37076U, // LR_D
+ 38254U, // LR_D_AQ
+ 37812U, // LR_D_AQ_RL
+ 37528U, // LR_D_RL
+ 38914U, // LR_W
+ 38391U, // LR_W_AQ
+ 37971U, // LR_W_AQ_RL
+ 37665U, // LR_W_RL
+ 21009U, // LUI
+ 22660U, // LW
+ 22457U, // LWU
+ 1848U, // MRET
+ 21679U, // MUL
+ 20909U, // MULH
+ 22409U, // MULHSU
+ 22367U, // MULHU
+ 22683U, // MULW
+ 22103U, // OR
+ 20988U, // ORI
+ 21684U, // REM
+ 22403U, // REMU
+ 22715U, // REMUW
+ 22689U, // REMW
+ 20507U, // SB
+ 20559U, // SC_D
+ 21808U, // SC_D_AQ
+ 21356U, // SC_D_AQ_RL
+ 21082U, // SC_D_RL
+ 22473U, // SC_W
+ 21945U, // SC_W_AQ
+ 21515U, // SC_W_AQ_RL
+ 21219U, // SC_W_RL
+ 20881U, // SD
+ 20486U, // SFENCE_VMA
+ 20915U, // SH
+ 21077U, // SLL
+ 20973U, // SLLI
+ 22644U, // SLLIW
+ 22671U, // SLLW
+ 22351U, // SLT
+ 21001U, // SLTI
+ 22374U, // SLTIU
+ 22423U, // SLTU
+ 20498U, // SRA
+ 20930U, // SRAI
+ 22628U, // SRAIW
+ 22606U, // SRAW
+ 1854U, // SRET
+ 21674U, // SRL
+ 20981U, // SRLI
+ 22651U, // SRLIW
+ 22677U, // SRLW
+ 20513U, // SUB
+ 22614U, // SUBW
+ 22704U, // SW
+ 1234U, // UNIMP
+ 1860U, // URET
+ 480U, // WFI
+ 22109U, // XOR
+ 20987U, // XORI
+ };
+
+ static const uint8_t OpInfo1[] = {
+ 0U, // PHI
+ 0U, // INLINEASM
+ 0U, // INLINEASM_BR
+ 0U, // CFI_INSTRUCTION
+ 0U, // EH_LABEL
+ 0U, // GC_LABEL
+ 0U, // ANNOTATION_LABEL
+ 0U, // KILL
+ 0U, // EXTRACT_SUBREG
+ 0U, // INSERT_SUBREG
+ 0U, // IMPLICIT_DEF
+ 0U, // SUBREG_TO_REG
+ 0U, // COPY_TO_REGCLASS
+ 0U, // DBG_VALUE
+ 0U, // DBG_LABEL
+ 0U, // REG_SEQUENCE
+ 0U, // COPY
+ 0U, // BUNDLE
+ 0U, // LIFETIME_START
+ 0U, // LIFETIME_END
+ 0U, // STACKMAP
+ 0U, // FENTRY_CALL
+ 0U, // PATCHPOINT
+ 0U, // LOAD_STACK_GUARD
+ 0U, // STATEPOINT
+ 0U, // LOCAL_ESCAPE
+ 0U, // FAULTING_OP
+ 0U, // PATCHABLE_OP
+ 0U, // PATCHABLE_FUNCTION_ENTER
+ 0U, // PATCHABLE_RET
+ 0U, // PATCHABLE_FUNCTION_EXIT
+ 0U, // PATCHABLE_TAIL_CALL
+ 0U, // PATCHABLE_EVENT_CALL
+ 0U, // PATCHABLE_TYPED_EVENT_CALL
+ 0U, // ICALL_BRANCH_FUNNEL
+ 0U, // G_ADD
+ 0U, // G_SUB
+ 0U, // G_MUL
+ 0U, // G_SDIV
+ 0U, // G_UDIV
+ 0U, // G_SREM
+ 0U, // G_UREM
+ 0U, // G_AND
+ 0U, // G_OR
+ 0U, // G_XOR
+ 0U, // G_IMPLICIT_DEF
+ 0U, // G_PHI
+ 0U, // G_FRAME_INDEX
+ 0U, // G_GLOBAL_VALUE
+ 0U, // G_EXTRACT
+ 0U, // G_UNMERGE_VALUES
+ 0U, // G_INSERT
+ 0U, // G_MERGE_VALUES
+ 0U, // G_BUILD_VECTOR
+ 0U, // G_BUILD_VECTOR_TRUNC
+ 0U, // G_CONCAT_VECTORS
+ 0U, // G_PTRTOINT
+ 0U, // G_INTTOPTR
+ 0U, // G_BITCAST
+ 0U, // G_INTRINSIC_TRUNC
+ 0U, // G_INTRINSIC_ROUND
+ 0U, // G_LOAD
+ 0U, // G_SEXTLOAD
+ 0U, // G_ZEXTLOAD
+ 0U, // G_STORE
+ 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
+ 0U, // G_ATOMIC_CMPXCHG
+ 0U, // G_ATOMICRMW_XCHG
+ 0U, // G_ATOMICRMW_ADD
+ 0U, // G_ATOMICRMW_SUB
+ 0U, // G_ATOMICRMW_AND
+ 0U, // G_ATOMICRMW_NAND
+ 0U, // G_ATOMICRMW_OR
+ 0U, // G_ATOMICRMW_XOR
+ 0U, // G_ATOMICRMW_MAX
+ 0U, // G_ATOMICRMW_MIN
+ 0U, // G_ATOMICRMW_UMAX
+ 0U, // G_ATOMICRMW_UMIN
+ 0U, // G_BRCOND
+ 0U, // G_BRINDIRECT
+ 0U, // G_INTRINSIC
+ 0U, // G_INTRINSIC_W_SIDE_EFFECTS
+ 0U, // G_ANYEXT
+ 0U, // G_TRUNC
+ 0U, // G_CONSTANT
+ 0U, // G_FCONSTANT
+ 0U, // G_VASTART
+ 0U, // G_VAARG
+ 0U, // G_SEXT
+ 0U, // G_ZEXT
+ 0U, // G_SHL
+ 0U, // G_LSHR
+ 0U, // G_ASHR
+ 0U, // G_ICMP
+ 0U, // G_FCMP
+ 0U, // G_SELECT
+ 0U, // G_UADDO
+ 0U, // G_UADDE
+ 0U, // G_USUBO
+ 0U, // G_USUBE
+ 0U, // G_SADDO
+ 0U, // G_SADDE
+ 0U, // G_SSUBO
+ 0U, // G_SSUBE
+ 0U, // G_UMULO
+ 0U, // G_SMULO
+ 0U, // G_UMULH
+ 0U, // G_SMULH
+ 0U, // G_FADD
+ 0U, // G_FSUB
+ 0U, // G_FMUL
+ 0U, // G_FMA
+ 0U, // G_FDIV
+ 0U, // G_FREM
+ 0U, // G_FPOW
+ 0U, // G_FEXP
+ 0U, // G_FEXP2
+ 0U, // G_FLOG
+ 0U, // G_FLOG2
+ 0U, // G_FLOG10
+ 0U, // G_FNEG
+ 0U, // G_FPEXT
+ 0U, // G_FPTRUNC
+ 0U, // G_FPTOSI
+ 0U, // G_FPTOUI
+ 0U, // G_SITOFP
+ 0U, // G_UITOFP
+ 0U, // G_FABS
+ 0U, // G_FCANONICALIZE
+ 0U, // G_GEP
+ 0U, // G_PTR_MASK
+ 0U, // G_BR
+ 0U, // G_INSERT_VECTOR_ELT
+ 0U, // G_EXTRACT_VECTOR_ELT
+ 0U, // G_SHUFFLE_VECTOR
+ 0U, // G_CTTZ
+ 0U, // G_CTTZ_ZERO_UNDEF
+ 0U, // G_CTLZ
+ 0U, // G_CTLZ_ZERO_UNDEF
+ 0U, // G_CTPOP
+ 0U, // G_BSWAP
+ 0U, // G_FCEIL
+ 0U, // G_FCOS
+ 0U, // G_FSIN
+ 0U, // G_FSQRT
+ 0U, // G_FFLOOR
+ 0U, // G_ADDRSPACE_CAST
+ 0U, // G_BLOCK_ADDR
+ 0U, // ADJCALLSTACKDOWN
+ 0U, // ADJCALLSTACKUP
+ 0U, // BuildPairF64Pseudo
+ 0U, // PseudoAtomicLoadNand32
+ 0U, // PseudoAtomicLoadNand64
+ 0U, // PseudoBR
+ 0U, // PseudoBRIND
+ 0U, // PseudoCALL
+ 0U, // PseudoCALLIndirect
+ 0U, // PseudoCmpXchg32
+ 0U, // PseudoCmpXchg64
+ 0U, // PseudoLA
+ 0U, // PseudoLI
+ 0U, // PseudoLLA
+ 0U, // PseudoMaskedAtomicLoadAdd32
+ 0U, // PseudoMaskedAtomicLoadMax32
+ 0U, // PseudoMaskedAtomicLoadMin32
+ 0U, // PseudoMaskedAtomicLoadNand32
+ 0U, // PseudoMaskedAtomicLoadSub32
+ 0U, // PseudoMaskedAtomicLoadUMax32
+ 0U, // PseudoMaskedAtomicLoadUMin32
+ 0U, // PseudoMaskedAtomicSwap32
+ 0U, // PseudoMaskedCmpXchg32
+ 0U, // PseudoRET
+ 0U, // PseudoTAIL
+ 0U, // PseudoTAILIndirect
+ 0U, // Select_FPR32_Using_CC_GPR
+ 0U, // Select_FPR64_Using_CC_GPR
+ 0U, // Select_GPR_Using_CC_GPR
+ 0U, // SplitF64Pseudo
+ 4U, // ADD
+ 4U, // ADDI
+ 4U, // ADDIW
+ 4U, // ADDW
+ 9U, // AMOADD_D
+ 9U, // AMOADD_D_AQ
+ 9U, // AMOADD_D_AQ_RL
+ 9U, // AMOADD_D_RL
+ 9U, // AMOADD_W
+ 9U, // AMOADD_W_AQ
+ 9U, // AMOADD_W_AQ_RL
+ 9U, // AMOADD_W_RL
+ 9U, // AMOAND_D
+ 9U, // AMOAND_D_AQ
+ 9U, // AMOAND_D_AQ_RL
+ 9U, // AMOAND_D_RL
+ 9U, // AMOAND_W
+ 9U, // AMOAND_W_AQ
+ 9U, // AMOAND_W_AQ_RL
+ 9U, // AMOAND_W_RL
+ 9U, // AMOMAXU_D
+ 9U, // AMOMAXU_D_AQ
+ 9U, // AMOMAXU_D_AQ_RL
+ 9U, // AMOMAXU_D_RL
+ 9U, // AMOMAXU_W
+ 9U, // AMOMAXU_W_AQ
+ 9U, // AMOMAXU_W_AQ_RL
+ 9U, // AMOMAXU_W_RL
+ 9U, // AMOMAX_D
+ 9U, // AMOMAX_D_AQ
+ 9U, // AMOMAX_D_AQ_RL
+ 9U, // AMOMAX_D_RL
+ 9U, // AMOMAX_W
+ 9U, // AMOMAX_W_AQ
+ 9U, // AMOMAX_W_AQ_RL
+ 9U, // AMOMAX_W_RL
+ 9U, // AMOMINU_D
+ 9U, // AMOMINU_D_AQ
+ 9U, // AMOMINU_D_AQ_RL
+ 9U, // AMOMINU_D_RL
+ 9U, // AMOMINU_W
+ 9U, // AMOMINU_W_AQ
+ 9U, // AMOMINU_W_AQ_RL
+ 9U, // AMOMINU_W_RL
+ 9U, // AMOMIN_D
+ 9U, // AMOMIN_D_AQ
+ 9U, // AMOMIN_D_AQ_RL
+ 9U, // AMOMIN_D_RL
+ 9U, // AMOMIN_W
+ 9U, // AMOMIN_W_AQ
+ 9U, // AMOMIN_W_AQ_RL
+ 9U, // AMOMIN_W_RL
+ 9U, // AMOOR_D
+ 9U, // AMOOR_D_AQ
+ 9U, // AMOOR_D_AQ_RL
+ 9U, // AMOOR_D_RL
+ 9U, // AMOOR_W
+ 9U, // AMOOR_W_AQ
+ 9U, // AMOOR_W_AQ_RL
+ 9U, // AMOOR_W_RL
+ 9U, // AMOSWAP_D
+ 9U, // AMOSWAP_D_AQ
+ 9U, // AMOSWAP_D_AQ_RL
+ 9U, // AMOSWAP_D_RL
+ 9U, // AMOSWAP_W
+ 9U, // AMOSWAP_W_AQ
+ 9U, // AMOSWAP_W_AQ_RL
+ 9U, // AMOSWAP_W_RL
+ 9U, // AMOXOR_D
+ 9U, // AMOXOR_D_AQ
+ 9U, // AMOXOR_D_AQ_RL
+ 9U, // AMOXOR_D_RL
+ 9U, // AMOXOR_W
+ 9U, // AMOXOR_W_AQ
+ 9U, // AMOXOR_W_AQ_RL
+ 9U, // AMOXOR_W_RL
+ 4U, // AND
+ 4U, // ANDI
+ 0U, // AUIPC
+ 4U, // BEQ
+ 4U, // BGE
+ 4U, // BGEU
+ 4U, // BLT
+ 4U, // BLTU
+ 4U, // BNE
+ 2U, // CSRRC
+ 2U, // CSRRCI
+ 2U, // CSRRS
+ 2U, // CSRRSI
+ 2U, // CSRRW
+ 2U, // CSRRWI
+ 0U, // C_ADD
+ 0U, // C_ADDI
+ 0U, // C_ADDI16SP
+ 4U, // C_ADDI4SPN
+ 0U, // C_ADDIW
+ 0U, // C_ADDW
+ 0U, // C_AND
+ 0U, // C_ANDI
+ 0U, // C_BEQZ
+ 0U, // C_BNEZ
+ 0U, // C_EBREAK
+ 13U, // C_FLD
+ 13U, // C_FLDSP
+ 13U, // C_FLW
+ 13U, // C_FLWSP
+ 13U, // C_FSD
+ 13U, // C_FSDSP
+ 13U, // C_FSW
+ 13U, // C_FSWSP
+ 0U, // C_J
+ 0U, // C_JAL
+ 0U, // C_JALR
+ 0U, // C_JR
+ 13U, // C_LD
+ 13U, // C_LDSP
+ 0U, // C_LI
+ 0U, // C_LUI
+ 13U, // C_LW
+ 13U, // C_LWSP
+ 0U, // C_MV
+ 0U, // C_NOP
+ 0U, // C_OR
+ 13U, // C_SD
+ 13U, // C_SDSP
+ 0U, // C_SLLI
+ 0U, // C_SRAI
+ 0U, // C_SRLI
+ 0U, // C_SUB
+ 0U, // C_SUBW
+ 13U, // C_SW
+ 13U, // C_SWSP
+ 0U, // C_UNIMP
+ 0U, // C_XOR
+ 4U, // DIV
+ 4U, // DIVU
+ 4U, // DIVUW
+ 4U, // DIVW
+ 0U, // EBREAK
+ 0U, // ECALL
+ 36U, // FADD_D
+ 36U, // FADD_S
+ 0U, // FCLASS_D
+ 0U, // FCLASS_S
+ 20U, // FCVT_D_L
+ 20U, // FCVT_D_LU
+ 0U, // FCVT_D_S
+ 0U, // FCVT_D_W
+ 0U, // FCVT_D_WU
+ 20U, // FCVT_LU_D
+ 20U, // FCVT_LU_S
+ 20U, // FCVT_L_D
+ 20U, // FCVT_L_S
+ 20U, // FCVT_S_D
+ 20U, // FCVT_S_L
+ 20U, // FCVT_S_LU
+ 20U, // FCVT_S_W
+ 20U, // FCVT_S_WU
+ 20U, // FCVT_WU_D
+ 20U, // FCVT_WU_S
+ 20U, // FCVT_W_D
+ 20U, // FCVT_W_S
+ 36U, // FDIV_D
+ 36U, // FDIV_S
+ 0U, // FENCE
+ 0U, // FENCE_I
+ 0U, // FENCE_TSO
+ 4U, // FEQ_D
+ 4U, // FEQ_S
+ 13U, // FLD
+ 4U, // FLE_D
+ 4U, // FLE_S
+ 4U, // FLT_D
+ 4U, // FLT_S
+ 13U, // FLW
+ 100U, // FMADD_D
+ 100U, // FMADD_S
+ 4U, // FMAX_D
+ 4U, // FMAX_S
+ 4U, // FMIN_D
+ 4U, // FMIN_S
+ 100U, // FMSUB_D
+ 100U, // FMSUB_S
+ 36U, // FMUL_D
+ 36U, // FMUL_S
+ 0U, // FMV_D_X
+ 0U, // FMV_W_X
+ 0U, // FMV_X_D
+ 0U, // FMV_X_W
+ 100U, // FNMADD_D
+ 100U, // FNMADD_S
+ 100U, // FNMSUB_D
+ 100U, // FNMSUB_S
+ 13U, // FSD
+ 4U, // FSGNJN_D
+ 4U, // FSGNJN_S
+ 4U, // FSGNJX_D
+ 4U, // FSGNJX_S
+ 4U, // FSGNJ_D
+ 4U, // FSGNJ_S
+ 20U, // FSQRT_D
+ 20U, // FSQRT_S
+ 36U, // FSUB_D
+ 36U, // FSUB_S
+ 13U, // FSW
+ 0U, // JAL
+ 4U, // JALR
+ 13U, // LB
+ 13U, // LBU
+ 13U, // LD
+ 13U, // LH
+ 13U, // LHU
+ 0U, // LR_D
+ 0U, // LR_D_AQ
+ 0U, // LR_D_AQ_RL
+ 0U, // LR_D_RL
+ 0U, // LR_W
+ 0U, // LR_W_AQ
+ 0U, // LR_W_AQ_RL
+ 0U, // LR_W_RL
+ 0U, // LUI
+ 13U, // LW
+ 13U, // LWU
+ 0U, // MRET
+ 4U, // MUL
+ 4U, // MULH
+ 4U, // MULHSU
+ 4U, // MULHU
+ 4U, // MULW
+ 4U, // OR
+ 4U, // ORI
+ 4U, // REM
+ 4U, // REMU
+ 4U, // REMUW
+ 4U, // REMW
+ 13U, // SB
+ 9U, // SC_D
+ 9U, // SC_D_AQ
+ 9U, // SC_D_AQ_RL
+ 9U, // SC_D_RL
+ 9U, // SC_W
+ 9U, // SC_W_AQ
+ 9U, // SC_W_AQ_RL
+ 9U, // SC_W_RL
+ 13U, // SD
+ 0U, // SFENCE_VMA
+ 13U, // SH
+ 4U, // SLL
+ 4U, // SLLI
+ 4U, // SLLIW
+ 4U, // SLLW
+ 4U, // SLT
+ 4U, // SLTI
+ 4U, // SLTIU
+ 4U, // SLTU
+ 4U, // SRA
+ 4U, // SRAI
+ 4U, // SRAIW
+ 4U, // SRAW
+ 0U, // SRET
+ 4U, // SRL
+ 4U, // SRLI
+ 4U, // SRLIW
+ 4U, // SRLW
+ 4U, // SUB
+ 4U, // SUBW
+ 13U, // SW
+ 0U, // UNIMP
+ 0U, // URET
+ 0U, // WFI
+ 4U, // XOR
+ 4U, // XORI
+ };
+
+ // Emit the opcode for the instruction.
+ uint32_t Bits = 0;
+ Bits |= OpInfo0[MCInst_getOpcode(MI)] << 0;
+ Bits |= OpInfo1[MCInst_getOpcode(MI)] << 16;
+ CS_ASSERT(Bits != 0 && "Cannot print this instruction.");
+#ifndef CAPSTONE_DIET
+ SStream_concat0(O, AsmStrs+(Bits & 4095)-1);
+#endif
+
+
+ // Fragment 0 encoded into 2 bits for 4 unique commands.
+ switch ((Bits >> 12) & 3) {
+ default: CS_ASSERT(0 && "Invalid command number.");
+ case 0:
+ // DBG_VALUE, DBG_LABEL, BUNDLE, LIFETIME_START, LIFETIME_END, FENTRY_CAL...
+ return;
+ break;
+ case 1:
+ // PseudoCALL, PseudoLA, PseudoLI, PseudoLLA, PseudoTAIL, ADD, ADDI, ADDI...
+ printOperand(MI, 0, O);
+ break;
+ case 2:
+ // C_ADD, C_ADDI, C_ADDI16SP, C_ADDIW, C_ADDW, C_AND, C_ANDI, C_OR, C_SLL...
+ printOperand(MI, 1, O);
+ SStream_concat0(O, ", ");
+ printOperand(MI, 2, O);
+ return;
+ break;
+ case 3:
+ // FENCE
+ printFenceArg(MI, 0, O);
+ SStream_concat0(O, ", ");
+ printFenceArg(MI, 1, O);
+ return;
+ break;
+ }
+
+
+ // Fragment 1 encoded into 2 bits for 3 unique commands.
+ switch ((Bits >> 14) & 3) {
+ default: CS_ASSERT(0 && "Invalid command number.");
+ case 0:
+ // PseudoCALL, PseudoTAIL, C_J, C_JAL, C_JALR, C_JR
+ return;
+ break;
+ case 1:
+ // PseudoLA, PseudoLI, PseudoLLA, ADD, ADDI, ADDIW, ADDW, AMOADD_D, AMOAD...
+ SStream_concat0(O, ", ");
+ break;
+ case 2:
+ // LR_D, LR_D_AQ, LR_D_AQ_RL, LR_D_RL, LR_W, LR_W_AQ, LR_W_AQ_RL, LR_W_RL
+ SStream_concat0(O, ", (");
+ printOperand(MI, 1, O);
+ SStream_concat0(O, ")");
+ return;
+ break;
+ }
+
+
+ // Fragment 2 encoded into 2 bits for 3 unique commands.
+ switch ((Bits >> 16) & 3) {
+ default: CS_ASSERT(0 && "Invalid command number.");
+ case 0:
+ // PseudoLA, PseudoLI, PseudoLLA, ADD, ADDI, ADDIW, ADDW, AND, ANDI, AUIP...
+ printOperand(MI, 1, O);
+ break;
+ case 1:
+ // AMOADD_D, AMOADD_D_AQ, AMOADD_D_AQ_RL, AMOADD_D_RL, AMOADD_W, AMOADD_W...
+ printOperand(MI, 2, O);
+ break;
+ case 2:
+ // CSRRC, CSRRCI, CSRRS, CSRRSI, CSRRW, CSRRWI
+ printCSRSystemRegister(MI, 1, O);
+ SStream_concat0(O, ", ");
+ printOperand(MI, 2, O);
+ return;
+ break;
+ }
+
+
+ // Fragment 3 encoded into 2 bits for 4 unique commands.
+ switch ((Bits >> 18) & 3) {
+ default: CS_ASSERT(0 && "Invalid command number.");
+ case 0:
+ // PseudoLA, PseudoLI, PseudoLLA, AUIPC, C_BEQZ, C_BNEZ, C_LI, C_LUI, C_M...
+ return;
+ break;
+ case 1:
+ // ADD, ADDI, ADDIW, ADDW, AND, ANDI, BEQ, BGE, BGEU, BLT, BLTU, BNE, C_A...
+ SStream_concat0(O, ", ");
+ break;
+ case 2:
+ // AMOADD_D, AMOADD_D_AQ, AMOADD_D_AQ_RL, AMOADD_D_RL, AMOADD_W, AMOADD_W...
+ SStream_concat0(O, ", (");
+ printOperand(MI, 1, O);
+ SStream_concat0(O, ")");
+ return;
+ break;
+ case 3:
+ // C_FLD, C_FLDSP, C_FLW, C_FLWSP, C_FSD, C_FSDSP, C_FSW, C_FSWSP, C_LD, ...
+ SStream_concat0(O, "(");
+ printOperand(MI, 1, O);
+ SStream_concat0(O, ")");
+ return;
+ break;
+ }
+
+
+ // Fragment 4 encoded into 1 bits for 2 unique commands.
+ if ((Bits >> 20) & 1) {
+ // FCVT_D_L, FCVT_D_LU, FCVT_LU_D, FCVT_LU_S, FCVT_L_D, FCVT_L_S, FCVT_S_...
+ printFRMArg(MI, 2, O);
+ return;
+ } else {
+ // ADD, ADDI, ADDIW, ADDW, AND, ANDI, BEQ, BGE, BGEU, BLT, BLTU, BNE, C_A...
+ printOperand(MI, 2, O);
+ }
+
+
+ // Fragment 5 encoded into 1 bits for 2 unique commands.
+ if ((Bits >> 21) & 1) {
+ // FADD_D, FADD_S, FDIV_D, FDIV_S, FMADD_D, FMADD_S, FMSUB_D, FMSUB_S, FM...
+ SStream_concat0(O, ", ");
+ } else {
+ // ADD, ADDI, ADDIW, ADDW, AND, ANDI, BEQ, BGE, BGEU, BLT, BLTU, BNE, C_A...
+ return;
+ }
+
+
+ // Fragment 6 encoded into 1 bits for 2 unique commands.
+ if ((Bits >> 22) & 1) {
+ // FMADD_D, FMADD_S, FMSUB_D, FMSUB_S, FNMADD_D, FNMADD_S, FNMSUB_D, FNMS...
+ printOperand(MI, 3, O);
+ SStream_concat0(O, ", ");
+ printFRMArg(MI, 4, O);
+ return;
+ } else {
+ // FADD_D, FADD_S, FDIV_D, FDIV_S, FMUL_D, FMUL_S, FSUB_D, FSUB_S
+ printFRMArg(MI, 3, O);
+ return;
+ }
+
+}
+
+
+/// getRegisterName - This method is automatically generated by tblgen
+/// from the register set description. This returns the assembler name
+/// for the specified register.
+static const char *
+getRegisterName(unsigned RegNo, unsigned AltIdx)
+{
+ CS_ASSERT(RegNo && RegNo < 97 && "Invalid register number!");
+
+#ifndef CAPSTONE_DIET
+ static const char AsmStrsABIRegAltName[] = {
+ /* 0 */ 'f', 's', '1', '0', 0,
+ /* 5 */ 'f', 't', '1', '0', 0,
+ /* 10 */ 'f', 'a', '0', 0,
+ /* 14 */ 'f', 's', '0', 0,
+ /* 18 */ 'f', 't', '0', 0,
+ /* 22 */ 'f', 's', '1', '1', 0,
+ /* 27 */ 'f', 't', '1', '1', 0,
+ /* 32 */ 'f', 'a', '1', 0,
+ /* 36 */ 'f', 's', '1', 0,
+ /* 40 */ 'f', 't', '1', 0,
+ /* 44 */ 'f', 'a', '2', 0,
+ /* 48 */ 'f', 's', '2', 0,
+ /* 52 */ 'f', 't', '2', 0,
+ /* 56 */ 'f', 'a', '3', 0,
+ /* 60 */ 'f', 's', '3', 0,
+ /* 64 */ 'f', 't', '3', 0,
+ /* 68 */ 'f', 'a', '4', 0,
+ /* 72 */ 'f', 's', '4', 0,
+ /* 76 */ 'f', 't', '4', 0,
+ /* 80 */ 'f', 'a', '5', 0,
+ /* 84 */ 'f', 's', '5', 0,
+ /* 88 */ 'f', 't', '5', 0,
+ /* 92 */ 'f', 'a', '6', 0,
+ /* 96 */ 'f', 's', '6', 0,
+ /* 100 */ 'f', 't', '6', 0,
+ /* 104 */ 'f', 'a', '7', 0,
+ /* 108 */ 'f', 's', '7', 0,
+ /* 112 */ 'f', 't', '7', 0,
+ /* 116 */ 'f', 's', '8', 0,
+ /* 120 */ 'f', 't', '8', 0,
+ /* 124 */ 'f', 's', '9', 0,
+ /* 128 */ 'f', 't', '9', 0,
+ /* 132 */ 'r', 'a', 0,
+ /* 135 */ 'z', 'e', 'r', 'o', 0,
+ /* 140 */ 'g', 'p', 0,
+ /* 143 */ 's', 'p', 0,
+ /* 146 */ 't', 'p', 0,
+ };
+
+ static const uint8_t RegAsmOffsetABIRegAltName[] = {
+ 135, 132, 143, 140, 146, 19, 41, 53, 15, 37, 11, 33, 45, 57,
+ 69, 81, 93, 105, 49, 61, 73, 85, 97, 109, 117, 125, 1, 23,
+ 65, 77, 89, 101, 18, 18, 40, 40, 52, 52, 64, 64, 76, 76,
+ 88, 88, 100, 100, 112, 112, 14, 14, 36, 36, 10, 10, 32, 32,
+ 44, 44, 56, 56, 68, 68, 80, 80, 92, 92, 104, 104, 48, 48,
+ 60, 60, 72, 72, 84, 84, 96, 96, 108, 108, 116, 116, 124, 124,
+ 0, 0, 22, 22, 120, 120, 128, 128, 5, 5, 27, 27,
+ };
+
+ static const char AsmStrsNoRegAltName[] = {
+ /* 0 */ 'f', '1', '0', 0,
+ /* 4 */ 'x', '1', '0', 0,
+ /* 8 */ 'f', '2', '0', 0,
+ /* 12 */ 'x', '2', '0', 0,
+ /* 16 */ 'f', '3', '0', 0,
+ /* 20 */ 'x', '3', '0', 0,
+ /* 24 */ 'f', '0', 0,
+ /* 27 */ 'x', '0', 0,
+ /* 30 */ 'f', '1', '1', 0,
+ /* 34 */ 'x', '1', '1', 0,
+ /* 38 */ 'f', '2', '1', 0,
+ /* 42 */ 'x', '2', '1', 0,
+ /* 46 */ 'f', '3', '1', 0,
+ /* 50 */ 'x', '3', '1', 0,
+ /* 54 */ 'f', '1', 0,
+ /* 57 */ 'x', '1', 0,
+ /* 60 */ 'f', '1', '2', 0,
+ /* 64 */ 'x', '1', '2', 0,
+ /* 68 */ 'f', '2', '2', 0,
+ /* 72 */ 'x', '2', '2', 0,
+ /* 76 */ 'f', '2', 0,
+ /* 79 */ 'x', '2', 0,
+ /* 82 */ 'f', '1', '3', 0,
+ /* 86 */ 'x', '1', '3', 0,
+ /* 90 */ 'f', '2', '3', 0,
+ /* 94 */ 'x', '2', '3', 0,
+ /* 98 */ 'f', '3', 0,
+ /* 101 */ 'x', '3', 0,
+ /* 104 */ 'f', '1', '4', 0,
+ /* 108 */ 'x', '1', '4', 0,
+ /* 112 */ 'f', '2', '4', 0,
+ /* 116 */ 'x', '2', '4', 0,
+ /* 120 */ 'f', '4', 0,
+ /* 123 */ 'x', '4', 0,
+ /* 126 */ 'f', '1', '5', 0,
+ /* 130 */ 'x', '1', '5', 0,
+ /* 134 */ 'f', '2', '5', 0,
+ /* 138 */ 'x', '2', '5', 0,
+ /* 142 */ 'f', '5', 0,
+ /* 145 */ 'x', '5', 0,
+ /* 148 */ 'f', '1', '6', 0,
+ /* 152 */ 'x', '1', '6', 0,
+ /* 156 */ 'f', '2', '6', 0,
+ /* 160 */ 'x', '2', '6', 0,
+ /* 164 */ 'f', '6', 0,
+ /* 167 */ 'x', '6', 0,
+ /* 170 */ 'f', '1', '7', 0,
+ /* 174 */ 'x', '1', '7', 0,
+ /* 178 */ 'f', '2', '7', 0,
+ /* 182 */ 'x', '2', '7', 0,
+ /* 186 */ 'f', '7', 0,
+ /* 189 */ 'x', '7', 0,
+ /* 192 */ 'f', '1', '8', 0,
+ /* 196 */ 'x', '1', '8', 0,
+ /* 200 */ 'f', '2', '8', 0,
+ /* 204 */ 'x', '2', '8', 0,
+ /* 208 */ 'f', '8', 0,
+ /* 211 */ 'x', '8', 0,
+ /* 214 */ 'f', '1', '9', 0,
+ /* 218 */ 'x', '1', '9', 0,
+ /* 222 */ 'f', '2', '9', 0,
+ /* 226 */ 'x', '2', '9', 0,
+ /* 230 */ 'f', '9', 0,
+ /* 233 */ 'x', '9', 0,
+ };
+
+ static const uint8_t RegAsmOffsetNoRegAltName[] = {
+ 27, 57, 79, 101, 123, 145, 167, 189, 211, 233, 4, 34, 64, 86,
+ 108, 130, 152, 174, 196, 218, 12, 42, 72, 94, 116, 138, 160, 182,
+ 204, 226, 20, 50, 24, 24, 54, 54, 76, 76, 98, 98, 120, 120,
+ 142, 142, 164, 164, 186, 186, 208, 208, 230, 230, 0, 0, 30, 30,
+ 60, 60, 82, 82, 104, 104, 126, 126, 148, 148, 170, 170, 192, 192,
+ 214, 214, 8, 8, 38, 38, 68, 68, 90, 90, 112, 112, 134, 134,
+ 156, 156, 178, 178, 200, 200, 222, 222, 16, 16, 46, 46,
+ };
+
+ switch(AltIdx) {
+ default: CS_ASSERT(0 && "Invalid register alt name index!");
+ case RISCV_ABIRegAltName:
+ CS_ASSERT(*(AsmStrsABIRegAltName+RegAsmOffsetABIRegAltName[RegNo-1]) &&
+ "Invalid alt name index for register!");
+ return AsmStrsABIRegAltName+RegAsmOffsetABIRegAltName[RegNo-1];
+ case RISCV_NoRegAltName:
+ CS_ASSERT(*(AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1]) &&
+ "Invalid alt name index for register!");
+ return AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1];
+ }
+#else
+ return NULL;
+#endif
+}
+
+#ifdef PRINT_ALIAS_INSTR
+#undef PRINT_ALIAS_INSTR
+
+static bool RISCVInstPrinterValidateMCOperand(MCOperand *MCOp,
+ unsigned PredicateIndex);
+
+static bool printAliasInstr(MCInst *MI, SStream * OS, void *info)
+{
+ MCRegisterInfo *MRI = (MCRegisterInfo *) info;
+ const char *AsmString;
+ unsigned I = 0;
+#define ASMSTRING_CONTAIN_SIZE 64
+ unsigned AsmStringLen = 0;
+ char tmpString_[ASMSTRING_CONTAIN_SIZE];
+ char *tmpString = tmpString_;
+ switch (MCInst_getOpcode(MI)) {
+ default: return false;
+ case RISCV_ADDI:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (ADDI X0, X0, 0)
+ AsmString = "nop";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (ADDI GPR:$rd, GPR:$rs, 0)
+ AsmString = "mv $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_ADDIW:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (ADDIW GPR:$rd, GPR:$rs, 0)
+ AsmString = "sext.w $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_BEQ:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BEQ GPR:$rs, X0, simm13_lsb0:$offset)
+ AsmString = "beqz $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_BGE:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BGE X0, GPR:$rs, simm13_lsb0:$offset)
+ AsmString = "blez $\x02, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BGE GPR:$rs, X0, simm13_lsb0:$offset)
+ AsmString = "bgez $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_BLT:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BLT GPR:$rs, X0, simm13_lsb0:$offset)
+ AsmString = "bltz $\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BLT X0, GPR:$rs, simm13_lsb0:$offset)
+ AsmString = "bgtz $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_BNE:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 2), 1)) {
+ // (BNE GPR:$rs, X0, simm13_lsb0:$offset)
+ AsmString = "bnez $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRC:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRC X0, csr_sysreg:$csr, GPR:$rs)
+ AsmString = "csrc $\xFF\x02\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRCI:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0) {
+ // (CSRRCI X0, csr_sysreg:$csr, uimm5:$imm)
+ AsmString = "csrci $\xFF\x02\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRS:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3, X0)
+ AsmString = "frcsr $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 2 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 2, X0)
+ AsmString = "frrm $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 1 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 1, X0)
+ AsmString = "frflags $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3074 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3074, X0)
+ AsmString = "rdinstret $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3072 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3072, X0)
+ AsmString = "rdcycle $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3073 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3073, X0)
+ AsmString = "rdtime $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3202 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3202, X0)
+ AsmString = "rdinstreth $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3200 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3200, X0)
+ AsmString = "rdcycleh $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3201 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, 3201, X0)
+ AsmString = "rdtimeh $\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (CSRRS GPR:$rd, csr_sysreg:$csr, X0)
+ AsmString = "csrr $\x01, $\xFF\x02\x01";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRS X0, csr_sysreg:$csr, GPR:$rs)
+ AsmString = "csrs $\xFF\x02\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRSI:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0) {
+ // (CSRRSI X0, csr_sysreg:$csr, uimm5:$imm)
+ AsmString = "csrsi $\xFF\x02\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRW:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW X0, 3, GPR:$rs)
+ AsmString = "fscsr $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 2 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW X0, 2, GPR:$rs)
+ AsmString = "fsrm $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 1 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW X0, 1, GPR:$rs)
+ AsmString = "fsflags $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW X0, csr_sysreg:$csr, GPR:$rs)
+ AsmString = "csrw $\xFF\x02\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW GPR:$rd, 3, GPR:$rs)
+ AsmString = "fscsr $\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 2 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW GPR:$rd, 2, GPR:$rs)
+ AsmString = "fsrm $\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 1 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (CSRRW GPR:$rd, 1, GPR:$rs)
+ AsmString = "fsflags $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_CSRRWI:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 2) {
+ // (CSRRWI X0, 2, uimm5:$imm)
+ AsmString = "fsrmi $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 1) {
+ // (CSRRWI X0, 1, uimm5:$imm)
+ AsmString = "fsflagsi $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0) {
+ // (CSRRWI X0, csr_sysreg:$csr, uimm5:$imm)
+ AsmString = "csrwi $\xFF\x02\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 2) {
+ // (CSRRWI GPR:$rd, 2, uimm5:$imm)
+ AsmString = "fsrmi $\x01, $\x03";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 1) {
+ // (CSRRWI GPR:$rd, 1, uimm5:$imm)
+ AsmString = "fsflagsi $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FADD_D:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FADD_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, { 1, 1, 1 })
+ AsmString = "fadd.d $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FADD_S:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FADD_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, { 1, 1, 1 })
+ AsmString = "fadd.s $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_D_L:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_D_L FPR64:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.d.l $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_D_LU:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_D_LU FPR64:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.d.lu $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_LU_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_LU_D GPR:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.lu.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_LU_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_LU_S GPR:$rd, FPR32:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.lu.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_L_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_L_D GPR:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.l.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_L_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_L_S GPR:$rd, FPR32:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.l.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_S_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_S_D FPR32:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.s.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_S_L:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_S_L FPR32:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.s.l $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_S_LU:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_S_LU FPR32:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.s.lu $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_S_W:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_S_W FPR32:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.s.w $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_S_WU:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_S_WU FPR32:$rd, GPR:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.s.wu $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_WU_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_WU_D GPR:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.wu.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_WU_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_WU_S GPR:$rd, FPR32:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.wu.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_W_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_W_D GPR:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.w.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FCVT_W_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FCVT_W_S GPR:$rd, FPR32:$rs1, { 1, 1, 1 })
+ AsmString = "fcvt.w.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FDIV_D:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FDIV_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, { 1, 1, 1 })
+ AsmString = "fdiv.d $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FDIV_S:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FDIV_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, { 1, 1, 1 })
+ AsmString = "fdiv.s $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FENCE:
+ if (MCInst_getNumOperands(MI) == 2 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 0)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 0)) == 15 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 1)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 1)) == 15) {
+ // (FENCE 15, 15)
+ AsmString = "fence";
+ break;
+ }
+ return false;
+ case RISCV_FMADD_D:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FMADD_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, FPR64:$rs3, { 1, 1, 1 })
+ AsmString = "fmadd.d $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FMADD_S:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FMADD_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, FPR32:$rs3, { 1, 1, 1 })
+ AsmString = "fmadd.s $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FMSUB_D:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FMSUB_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, FPR64:$rs3, { 1, 1, 1 })
+ AsmString = "fmsub.d $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FMSUB_S:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FMSUB_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, FPR32:$rs3, { 1, 1, 1 })
+ AsmString = "fmsub.s $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FMUL_D:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FMUL_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, { 1, 1, 1 })
+ AsmString = "fmul.d $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FMUL_S:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FMUL_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, { 1, 1, 1 })
+ AsmString = "fmul.s $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FNMADD_D:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FNMADD_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, FPR64:$rs3, { 1, 1, 1 })
+ AsmString = "fnmadd.d $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FNMADD_S:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FNMADD_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, FPR32:$rs3, { 1, 1, 1 })
+ AsmString = "fnmadd.s $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FNMSUB_D:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FNMSUB_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, FPR64:$rs3, { 1, 1, 1 })
+ AsmString = "fnmsub.d $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FNMSUB_S:
+ if (MCInst_getNumOperands(MI) == 5 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 3)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 3))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 4)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 4)) == 7) {
+ // (FNMSUB_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, FPR32:$rs3, { 1, 1, 1 })
+ AsmString = "fnmsub.s $\x01, $\x02, $\x03, $\x04";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJN_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJN_D FPR64:$rd, FPR64:$rs, FPR64:$rs)
+ AsmString = "fneg.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJN_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJN_S FPR32:$rd, FPR32:$rs, FPR32:$rs)
+ AsmString = "fneg.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJX_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJX_D FPR64:$rd, FPR64:$rs, FPR64:$rs)
+ AsmString = "fabs.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJX_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJX_S FPR32:$rd, FPR32:$rs, FPR32:$rs)
+ AsmString = "fabs.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJ_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJ_D FPR64:$rd, FPR64:$rs, FPR64:$rs)
+ AsmString = "fmv.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSGNJ_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == MCOperand_getReg(MCInst_getOperand(MI, 1))) {
+ // (FSGNJ_S FPR32:$rd, FPR32:$rs, FPR32:$rs)
+ AsmString = "fmv.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSQRT_D:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FSQRT_D FPR64:$rd, FPR64:$rs1, { 1, 1, 1 })
+ AsmString = "fsqrt.d $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSQRT_S:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 7) {
+ // (FSQRT_S FPR32:$rd, FPR32:$rs1, { 1, 1, 1 })
+ AsmString = "fsqrt.s $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_FSUB_D:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR64RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FSUB_D FPR64:$rd, FPR64:$rs1, FPR64:$rs2, { 1, 1, 1 })
+ AsmString = "fsub.d $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_FSUB_S:
+ if (MCInst_getNumOperands(MI) == 4 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_FPR32RegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 3)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 3)) == 7) {
+ // (FSUB_S FPR32:$rd, FPR32:$rs1, FPR32:$rs2, { 1, 1, 1 })
+ AsmString = "fsub.s $\x01, $\x02, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_JAL:
+ if (MCInst_getNumOperands(MI) == 2 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 1), 2)) {
+ // (JAL X0, simm21_lsb0_jal:$offset)
+ AsmString = "j $\x02";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 2 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X1 &&
+ RISCVInstPrinterValidateMCOperand(MCInst_getOperand(MI, 1), 2)) {
+ // (JAL X1, simm21_lsb0_jal:$offset)
+ AsmString = "jal $\x02";
+ break;
+ }
+ return false;
+ case RISCV_JALR:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X1 &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (JALR X0, X1, 0)
+ AsmString = "ret";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (JALR X0, GPR:$rs, 0)
+ AsmString = "jr $\x02";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X1 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 0) {
+ // (JALR X1, GPR:$rs, 0)
+ AsmString = "jalr $\x02";
+ break;
+ }
+ return false;
+ case RISCV_SFENCE_VMA:
+ if (MCInst_getNumOperands(MI) == 2 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 0)) == RISCV_X0 &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0) {
+ // (SFENCE_VMA X0, X0)
+ AsmString = "sfence.vma";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 2 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0) {
+ // (SFENCE_VMA GPR:$rs, X0)
+ AsmString = "sfence.vma $\x01";
+ break;
+ }
+ return false;
+ case RISCV_SLT:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 2)) == RISCV_X0) {
+ // (SLT GPR:$rd, GPR:$rs, X0)
+ AsmString = "sltz $\x01, $\x02";
+ break;
+ }
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (SLT GPR:$rd, X0, GPR:$rs)
+ AsmString = "sgtz $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_SLTIU:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == 1) {
+ // (SLTIU GPR:$rd, GPR:$rs, 1)
+ AsmString = "seqz $\x01, $\x02";
+ break;
+ }
+ return false;
+ case RISCV_SLTU:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (SLTU GPR:$rd, X0, GPR:$rs)
+ AsmString = "snez $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_SUB:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (SUB GPR:$rd, X0, GPR:$rs)
+ AsmString = "neg $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_SUBW:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_getReg(MCInst_getOperand(MI, 1)) == RISCV_X0 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 2)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 2)))) {
+ // (SUBW GPR:$rd, X0, GPR:$rs)
+ AsmString = "negw $\x01, $\x03";
+ break;
+ }
+ return false;
+ case RISCV_XORI:
+ if (MCInst_getNumOperands(MI) == 3 &&
+ MCOperand_isReg(MCInst_getOperand(MI, 0)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 0))) &&
+ MCOperand_isReg(MCInst_getOperand(MI, 1)) &&
+ MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, RISCV_GPRRegClassID), MCOperand_getReg(MCInst_getOperand(MI, 1))) &&
+ MCOperand_isImm(MCInst_getOperand(MI, 2)) &&
+ MCOperand_getImm(MCInst_getOperand(MI, 2)) == -1) {
+ // (XORI GPR:$rd, GPR:$rs, -1)
+ AsmString = "not $\x01, $\x02";
+ break;
+ }
+ return false;
+ }
+
+ AsmStringLen = strlen(AsmString);
+ if (ASMSTRING_CONTAIN_SIZE - 1 < AsmStringLen)
+ tmpString = cs_strdup(AsmString);
+ else
+ tmpString = memcpy(tmpString, AsmString, 1 + AsmStringLen);
+
+ while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
+ AsmString[I] != '$' && AsmString[I] != '\0')
+ ++I;
+ tmpString[I] = 0;
+ SStream_concat0(OS, tmpString);
+ if (ASMSTRING_CONTAIN_SIZE - 1 < AsmStringLen)
+ /* Free the possible cs_strdup() memory. PR#1424. */
+ cs_mem_free(tmpString);
+#undef ASMSTRING_CONTAIN_SIZE
+
+ if (AsmString[I] != '\0') {
+ if (AsmString[I] == ' ' || AsmString[I] == '\t') {
+ SStream_concat0(OS, " ");
+ ++I;
+ }
+ do {
+ if (AsmString[I] == '$') {
+ ++I;
+ if (AsmString[I] == (char)0xff) {
+ ++I;
+ int OpIdx = AsmString[I++] - 1;
+ int PrintMethodIdx = AsmString[I++] - 1;
+ printCustomAliasOperand(MI, OpIdx, PrintMethodIdx, OS);
+ } else
+ printOperand(MI, (unsigned)(AsmString[I++]) - 1, OS);
+ } else {
+ SStream_concat0(OS, &AsmString[I++]);
+ }
+ } while (AsmString[I] != '\0');
+ }
+
+ return true;
+}
+
+static void printCustomAliasOperand(
+ MCInst *MI, unsigned OpIdx,
+ unsigned PrintMethodIdx,
+ SStream *OS) {
+ switch (PrintMethodIdx) {
+ default:
+ CS_ASSERT(0 && "Unknown PrintMethod kind");
+ break;
+ case 0:
+ printCSRSystemRegister(MI, OpIdx, OS);
+ break;
+ }
+}
+
+static bool RISCVInstPrinterValidateMCOperand(MCOperand *MCOp,
+ unsigned PredicateIndex) {
+ // TODO: need some constant untils operate the MCOperand,
+ // but current CAPSTONE does't have.
+ // So, We just return true
+ return true;
+
+#if 0
+ switch (PredicateIndex) {
+ default:
+ llvm_unreachable("Unknown MCOperandPredicate kind");
+ break;
+ case 1: {
+
+ int64_t Imm;
+ if (MCOp.evaluateAsConstantImm(Imm))
+ return isShiftedInt<12, 1>(Imm);
+ return MCOp.isBareSymbolRef();
+
+ }
+ case 2: {
+
+ int64_t Imm;
+ if (MCOp.evaluateAsConstantImm(Imm))
+ return isShiftedInt<20, 1>(Imm);
+ return MCOp.isBareSymbolRef();
+
+ }
+ }
+#endif
+}
+
+#endif // PRINT_ALIAS_INSTR
diff --git a/capstone/arch/RISCV/RISCVGenDisassemblerTables.inc b/capstone/arch/RISCV/RISCVGenDisassemblerTables.inc
new file mode 100644
index 000000000..101728d30
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenDisassemblerTables.inc
@@ -0,0 +1,1776 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* * RISCV Disassembler *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+/* Capstone Disassembly Engine */
+/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
+
+#include "../../MCInst.h"
+#include "../../LEB128.h"
+#include "../../cs_priv.h"
+
+// Helper functions for extracting fields from encoded instructions.
+// InsnType must either be integral or an APInt-like object that must:
+// * Have a static const max_size_in_bits equal to the number of bits in the
+// encoding.
+// * be default-constructible and copy-constructible
+// * be constructible from a uint64_t
+// * be constructible from an APInt (this can be private)
+// * Support getBitsSet(loBit, hiBit)
+// * be convertible to uint64_t
+// * Support the ~, &, ==, !=, and |= operators with other objects of the same type
+// * Support shift (<<, >>) with signed and unsigned integers on the RHS
+// * Support put (<<) to raw_ostream&
+#define FieldFromInstruction(fname, InsnType) \
+static InsnType fname(InsnType insn, unsigned startBit, unsigned numBits) \
+{ \
+ InsnType fieldMask; \
+ if (numBits == sizeof(InsnType)*8) \
+ fieldMask = (InsnType)(-1LL); \
+ else \
+ fieldMask = (((InsnType)1 << numBits) - 1) << startBit; \
+ return (insn & fieldMask) >> startBit; \
+}
+
+static const uint8_t DecoderTable16[] = {
+/* 0 */ MCD_OPC_ExtractField, 13, 3, // Inst{15-13} ...
+/* 3 */ MCD_OPC_FilterValue, 0, 77, 0, 0, // Skip to: 85
+/* 8 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 11 */ MCD_OPC_FilterValue, 0, 25, 0, 0, // Skip to: 41
+/* 16 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 32
+/* 21 */ MCD_OPC_CheckField, 2, 11, 0, 4, 0, 0, // Skip to: 32
+/* 28 */ MCD_OPC_Decode, 182, 2, 0, // Opcode: C_UNIMP
+/* 32 */ MCD_OPC_CheckPredicate, 0, 116, 2, 0, // Skip to: 665
+/* 37 */ MCD_OPC_Decode, 144, 2, 1, // Opcode: C_ADDI4SPN
+/* 41 */ MCD_OPC_FilterValue, 1, 25, 0, 0, // Skip to: 71
+/* 46 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 62
+/* 51 */ MCD_OPC_CheckField, 7, 6, 0, 4, 0, 0, // Skip to: 62
+/* 58 */ MCD_OPC_Decode, 171, 2, 0, // Opcode: C_NOP
+/* 62 */ MCD_OPC_CheckPredicate, 0, 86, 2, 0, // Skip to: 665
+/* 67 */ MCD_OPC_Decode, 142, 2, 2, // Opcode: C_ADDI
+/* 71 */ MCD_OPC_FilterValue, 2, 77, 2, 0, // Skip to: 665
+/* 76 */ MCD_OPC_CheckPredicate, 0, 72, 2, 0, // Skip to: 665
+/* 81 */ MCD_OPC_Decode, 175, 2, 3, // Opcode: C_SLLI
+/* 85 */ MCD_OPC_FilterValue, 1, 45, 0, 0, // Skip to: 135
+/* 90 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 93 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 107
+/* 98 */ MCD_OPC_CheckPredicate, 1, 50, 2, 0, // Skip to: 665
+/* 103 */ MCD_OPC_Decode, 152, 2, 4, // Opcode: C_FLD
+/* 107 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 121
+/* 112 */ MCD_OPC_CheckPredicate, 2, 36, 2, 0, // Skip to: 665
+/* 117 */ MCD_OPC_Decode, 145, 2, 2, // Opcode: C_ADDIW
+/* 121 */ MCD_OPC_FilterValue, 2, 27, 2, 0, // Skip to: 665
+/* 126 */ MCD_OPC_CheckPredicate, 1, 22, 2, 0, // Skip to: 665
+/* 131 */ MCD_OPC_Decode, 153, 2, 5, // Opcode: C_FLDSP
+/* 135 */ MCD_OPC_FilterValue, 2, 45, 0, 0, // Skip to: 185
+/* 140 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 143 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 157
+/* 148 */ MCD_OPC_CheckPredicate, 0, 0, 2, 0, // Skip to: 665
+/* 153 */ MCD_OPC_Decode, 168, 2, 6, // Opcode: C_LW
+/* 157 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 171
+/* 162 */ MCD_OPC_CheckPredicate, 0, 242, 1, 0, // Skip to: 665
+/* 167 */ MCD_OPC_Decode, 166, 2, 7, // Opcode: C_LI
+/* 171 */ MCD_OPC_FilterValue, 2, 233, 1, 0, // Skip to: 665
+/* 176 */ MCD_OPC_CheckPredicate, 0, 228, 1, 0, // Skip to: 665
+/* 181 */ MCD_OPC_Decode, 169, 2, 8, // Opcode: C_LWSP
+/* 185 */ MCD_OPC_FilterValue, 3, 61, 0, 0, // Skip to: 251
+/* 190 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 193 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 207
+/* 198 */ MCD_OPC_CheckPredicate, 2, 206, 1, 0, // Skip to: 665
+/* 203 */ MCD_OPC_Decode, 164, 2, 9, // Opcode: C_LD
+/* 207 */ MCD_OPC_FilterValue, 1, 25, 0, 0, // Skip to: 237
+/* 212 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 228
+/* 217 */ MCD_OPC_CheckField, 7, 5, 2, 4, 0, 0, // Skip to: 228
+/* 224 */ MCD_OPC_Decode, 143, 2, 10, // Opcode: C_ADDI16SP
+/* 228 */ MCD_OPC_CheckPredicate, 0, 176, 1, 0, // Skip to: 665
+/* 233 */ MCD_OPC_Decode, 167, 2, 11, // Opcode: C_LUI
+/* 237 */ MCD_OPC_FilterValue, 2, 167, 1, 0, // Skip to: 665
+/* 242 */ MCD_OPC_CheckPredicate, 2, 162, 1, 0, // Skip to: 665
+/* 247 */ MCD_OPC_Decode, 165, 2, 12, // Opcode: C_LDSP
+/* 251 */ MCD_OPC_FilterValue, 4, 3, 1, 0, // Skip to: 515
+/* 256 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 259 */ MCD_OPC_FilterValue, 1, 167, 0, 0, // Skip to: 431
+/* 264 */ MCD_OPC_ExtractField, 10, 2, // Inst{11-10} ...
+/* 267 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 281
+/* 272 */ MCD_OPC_CheckPredicate, 0, 132, 1, 0, // Skip to: 665
+/* 277 */ MCD_OPC_Decode, 177, 2, 13, // Opcode: C_SRLI
+/* 281 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 295
+/* 286 */ MCD_OPC_CheckPredicate, 0, 118, 1, 0, // Skip to: 665
+/* 291 */ MCD_OPC_Decode, 176, 2, 13, // Opcode: C_SRAI
+/* 295 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 309
+/* 300 */ MCD_OPC_CheckPredicate, 0, 104, 1, 0, // Skip to: 665
+/* 305 */ MCD_OPC_Decode, 148, 2, 14, // Opcode: C_ANDI
+/* 309 */ MCD_OPC_FilterValue, 3, 95, 1, 0, // Skip to: 665
+/* 314 */ MCD_OPC_ExtractField, 5, 2, // Inst{6-5} ...
+/* 317 */ MCD_OPC_FilterValue, 0, 31, 0, 0, // Skip to: 353
+/* 322 */ MCD_OPC_ExtractField, 12, 1, // Inst{12} ...
+/* 325 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 339
+/* 330 */ MCD_OPC_CheckPredicate, 0, 74, 1, 0, // Skip to: 665
+/* 335 */ MCD_OPC_Decode, 178, 2, 15, // Opcode: C_SUB
+/* 339 */ MCD_OPC_FilterValue, 1, 65, 1, 0, // Skip to: 665
+/* 344 */ MCD_OPC_CheckPredicate, 2, 60, 1, 0, // Skip to: 665
+/* 349 */ MCD_OPC_Decode, 179, 2, 15, // Opcode: C_SUBW
+/* 353 */ MCD_OPC_FilterValue, 1, 31, 0, 0, // Skip to: 389
+/* 358 */ MCD_OPC_ExtractField, 12, 1, // Inst{12} ...
+/* 361 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 375
+/* 366 */ MCD_OPC_CheckPredicate, 0, 38, 1, 0, // Skip to: 665
+/* 371 */ MCD_OPC_Decode, 183, 2, 15, // Opcode: C_XOR
+/* 375 */ MCD_OPC_FilterValue, 1, 29, 1, 0, // Skip to: 665
+/* 380 */ MCD_OPC_CheckPredicate, 2, 24, 1, 0, // Skip to: 665
+/* 385 */ MCD_OPC_Decode, 146, 2, 15, // Opcode: C_ADDW
+/* 389 */ MCD_OPC_FilterValue, 2, 16, 0, 0, // Skip to: 410
+/* 394 */ MCD_OPC_CheckPredicate, 0, 10, 1, 0, // Skip to: 665
+/* 399 */ MCD_OPC_CheckField, 12, 1, 0, 3, 1, 0, // Skip to: 665
+/* 406 */ MCD_OPC_Decode, 172, 2, 15, // Opcode: C_OR
+/* 410 */ MCD_OPC_FilterValue, 3, 250, 0, 0, // Skip to: 665
+/* 415 */ MCD_OPC_CheckPredicate, 0, 245, 0, 0, // Skip to: 665
+/* 420 */ MCD_OPC_CheckField, 12, 1, 0, 238, 0, 0, // Skip to: 665
+/* 427 */ MCD_OPC_Decode, 147, 2, 15, // Opcode: C_AND
+/* 431 */ MCD_OPC_FilterValue, 2, 229, 0, 0, // Skip to: 665
+/* 436 */ MCD_OPC_ExtractField, 12, 1, // Inst{12} ...
+/* 439 */ MCD_OPC_FilterValue, 0, 25, 0, 0, // Skip to: 469
+/* 444 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 460
+/* 449 */ MCD_OPC_CheckField, 2, 5, 0, 4, 0, 0, // Skip to: 460
+/* 456 */ MCD_OPC_Decode, 163, 2, 16, // Opcode: C_JR
+/* 460 */ MCD_OPC_CheckPredicate, 0, 200, 0, 0, // Skip to: 665
+/* 465 */ MCD_OPC_Decode, 170, 2, 17, // Opcode: C_MV
+/* 469 */ MCD_OPC_FilterValue, 1, 191, 0, 0, // Skip to: 665
+/* 474 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 490
+/* 479 */ MCD_OPC_CheckField, 2, 10, 0, 4, 0, 0, // Skip to: 490
+/* 486 */ MCD_OPC_Decode, 151, 2, 0, // Opcode: C_EBREAK
+/* 490 */ MCD_OPC_CheckPredicate, 0, 11, 0, 0, // Skip to: 506
+/* 495 */ MCD_OPC_CheckField, 2, 5, 0, 4, 0, 0, // Skip to: 506
+/* 502 */ MCD_OPC_Decode, 162, 2, 16, // Opcode: C_JALR
+/* 506 */ MCD_OPC_CheckPredicate, 0, 154, 0, 0, // Skip to: 665
+/* 511 */ MCD_OPC_Decode, 141, 2, 18, // Opcode: C_ADD
+/* 515 */ MCD_OPC_FilterValue, 5, 45, 0, 0, // Skip to: 565
+/* 520 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 523 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 537
+/* 528 */ MCD_OPC_CheckPredicate, 1, 132, 0, 0, // Skip to: 665
+/* 533 */ MCD_OPC_Decode, 156, 2, 4, // Opcode: C_FSD
+/* 537 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 551
+/* 542 */ MCD_OPC_CheckPredicate, 0, 118, 0, 0, // Skip to: 665
+/* 547 */ MCD_OPC_Decode, 160, 2, 19, // Opcode: C_J
+/* 551 */ MCD_OPC_FilterValue, 2, 109, 0, 0, // Skip to: 665
+/* 556 */ MCD_OPC_CheckPredicate, 1, 104, 0, 0, // Skip to: 665
+/* 561 */ MCD_OPC_Decode, 157, 2, 20, // Opcode: C_FSDSP
+/* 565 */ MCD_OPC_FilterValue, 6, 45, 0, 0, // Skip to: 615
+/* 570 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 573 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 587
+/* 578 */ MCD_OPC_CheckPredicate, 0, 82, 0, 0, // Skip to: 665
+/* 583 */ MCD_OPC_Decode, 180, 2, 6, // Opcode: C_SW
+/* 587 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 601
+/* 592 */ MCD_OPC_CheckPredicate, 0, 68, 0, 0, // Skip to: 665
+/* 597 */ MCD_OPC_Decode, 149, 2, 21, // Opcode: C_BEQZ
+/* 601 */ MCD_OPC_FilterValue, 2, 59, 0, 0, // Skip to: 665
+/* 606 */ MCD_OPC_CheckPredicate, 0, 54, 0, 0, // Skip to: 665
+/* 611 */ MCD_OPC_Decode, 181, 2, 22, // Opcode: C_SWSP
+/* 615 */ MCD_OPC_FilterValue, 7, 45, 0, 0, // Skip to: 665
+/* 620 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 623 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 637
+/* 628 */ MCD_OPC_CheckPredicate, 2, 32, 0, 0, // Skip to: 665
+/* 633 */ MCD_OPC_Decode, 173, 2, 9, // Opcode: C_SD
+/* 637 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 651
+/* 642 */ MCD_OPC_CheckPredicate, 0, 18, 0, 0, // Skip to: 665
+/* 647 */ MCD_OPC_Decode, 150, 2, 21, // Opcode: C_BNEZ
+/* 651 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 665
+/* 656 */ MCD_OPC_CheckPredicate, 2, 4, 0, 0, // Skip to: 665
+/* 661 */ MCD_OPC_Decode, 174, 2, 23, // Opcode: C_SDSP
+/* 665 */ MCD_OPC_Fail,
+ 0
+};
+
+static const uint8_t DecoderTable32[] = {
+/* 0 */ MCD_OPC_ExtractField, 0, 7, // Inst{6-0} ...
+/* 3 */ MCD_OPC_FilterValue, 3, 76, 0, 0, // Skip to: 84
+/* 8 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 11 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 20
+/* 16 */ MCD_OPC_Decode, 129, 3, 24, // Opcode: LB
+/* 20 */ MCD_OPC_FilterValue, 1, 4, 0, 0, // Skip to: 29
+/* 25 */ MCD_OPC_Decode, 132, 3, 24, // Opcode: LH
+/* 29 */ MCD_OPC_FilterValue, 2, 4, 0, 0, // Skip to: 38
+/* 34 */ MCD_OPC_Decode, 143, 3, 24, // Opcode: LW
+/* 38 */ MCD_OPC_FilterValue, 3, 9, 0, 0, // Skip to: 52
+/* 43 */ MCD_OPC_CheckPredicate, 3, 55, 15, 0, // Skip to: 3943
+/* 48 */ MCD_OPC_Decode, 131, 3, 24, // Opcode: LD
+/* 52 */ MCD_OPC_FilterValue, 4, 4, 0, 0, // Skip to: 61
+/* 57 */ MCD_OPC_Decode, 130, 3, 24, // Opcode: LBU
+/* 61 */ MCD_OPC_FilterValue, 5, 4, 0, 0, // Skip to: 70
+/* 66 */ MCD_OPC_Decode, 133, 3, 24, // Opcode: LHU
+/* 70 */ MCD_OPC_FilterValue, 6, 28, 15, 0, // Skip to: 3943
+/* 75 */ MCD_OPC_CheckPredicate, 3, 23, 15, 0, // Skip to: 3943
+/* 80 */ MCD_OPC_Decode, 144, 3, 24, // Opcode: LWU
+/* 84 */ MCD_OPC_FilterValue, 7, 31, 0, 0, // Skip to: 120
+/* 89 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 92 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 106
+/* 97 */ MCD_OPC_CheckPredicate, 4, 1, 15, 0, // Skip to: 3943
+/* 102 */ MCD_OPC_Decode, 224, 2, 25, // Opcode: FLW
+/* 106 */ MCD_OPC_FilterValue, 3, 248, 14, 0, // Skip to: 3943
+/* 111 */ MCD_OPC_CheckPredicate, 5, 243, 14, 0, // Skip to: 3943
+/* 116 */ MCD_OPC_Decode, 219, 2, 26, // Opcode: FLD
+/* 120 */ MCD_OPC_FilterValue, 15, 52, 0, 0, // Skip to: 177
+/* 125 */ MCD_OPC_ExtractField, 7, 13, // Inst{19-7} ...
+/* 128 */ MCD_OPC_FilterValue, 0, 28, 0, 0, // Skip to: 161
+/* 133 */ MCD_OPC_ExtractField, 28, 4, // Inst{31-28} ...
+/* 136 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 145
+/* 141 */ MCD_OPC_Decode, 214, 2, 27, // Opcode: FENCE
+/* 145 */ MCD_OPC_FilterValue, 8, 209, 14, 0, // Skip to: 3943
+/* 150 */ MCD_OPC_CheckField, 20, 8, 51, 202, 14, 0, // Skip to: 3943
+/* 157 */ MCD_OPC_Decode, 216, 2, 0, // Opcode: FENCE_TSO
+/* 161 */ MCD_OPC_FilterValue, 32, 193, 14, 0, // Skip to: 3943
+/* 166 */ MCD_OPC_CheckField, 20, 12, 0, 186, 14, 0, // Skip to: 3943
+/* 173 */ MCD_OPC_Decode, 215, 2, 0, // Opcode: FENCE_I
+/* 177 */ MCD_OPC_FilterValue, 19, 99, 0, 0, // Skip to: 281
+/* 182 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 185 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 194
+/* 190 */ MCD_OPC_Decode, 179, 1, 24, // Opcode: ADDI
+/* 194 */ MCD_OPC_FilterValue, 1, 11, 0, 0, // Skip to: 210
+/* 199 */ MCD_OPC_CheckField, 26, 6, 0, 153, 14, 0, // Skip to: 3943
+/* 206 */ MCD_OPC_Decode, 170, 3, 28, // Opcode: SLLI
+/* 210 */ MCD_OPC_FilterValue, 2, 4, 0, 0, // Skip to: 219
+/* 215 */ MCD_OPC_Decode, 174, 3, 24, // Opcode: SLTI
+/* 219 */ MCD_OPC_FilterValue, 3, 4, 0, 0, // Skip to: 228
+/* 224 */ MCD_OPC_Decode, 175, 3, 24, // Opcode: SLTIU
+/* 228 */ MCD_OPC_FilterValue, 4, 4, 0, 0, // Skip to: 237
+/* 233 */ MCD_OPC_Decode, 193, 3, 24, // Opcode: XORI
+/* 237 */ MCD_OPC_FilterValue, 5, 21, 0, 0, // Skip to: 263
+/* 242 */ MCD_OPC_ExtractField, 26, 6, // Inst{31-26} ...
+/* 245 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 254
+/* 250 */ MCD_OPC_Decode, 183, 3, 28, // Opcode: SRLI
+/* 254 */ MCD_OPC_FilterValue, 16, 100, 14, 0, // Skip to: 3943
+/* 259 */ MCD_OPC_Decode, 178, 3, 28, // Opcode: SRAI
+/* 263 */ MCD_OPC_FilterValue, 6, 4, 0, 0, // Skip to: 272
+/* 268 */ MCD_OPC_Decode, 152, 3, 24, // Opcode: ORI
+/* 272 */ MCD_OPC_FilterValue, 7, 82, 14, 0, // Skip to: 3943
+/* 277 */ MCD_OPC_Decode, 255, 1, 24, // Opcode: ANDI
+/* 281 */ MCD_OPC_FilterValue, 23, 4, 0, 0, // Skip to: 290
+/* 286 */ MCD_OPC_Decode, 128, 2, 29, // Opcode: AUIPC
+/* 290 */ MCD_OPC_FilterValue, 27, 74, 0, 0, // Skip to: 369
+/* 295 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 298 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 312
+/* 303 */ MCD_OPC_CheckPredicate, 3, 51, 14, 0, // Skip to: 3943
+/* 308 */ MCD_OPC_Decode, 180, 1, 24, // Opcode: ADDIW
+/* 312 */ MCD_OPC_FilterValue, 1, 16, 0, 0, // Skip to: 333
+/* 317 */ MCD_OPC_CheckPredicate, 3, 37, 14, 0, // Skip to: 3943
+/* 322 */ MCD_OPC_CheckField, 25, 7, 0, 30, 14, 0, // Skip to: 3943
+/* 329 */ MCD_OPC_Decode, 171, 3, 30, // Opcode: SLLIW
+/* 333 */ MCD_OPC_FilterValue, 5, 21, 14, 0, // Skip to: 3943
+/* 338 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 341 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 355
+/* 346 */ MCD_OPC_CheckPredicate, 3, 8, 14, 0, // Skip to: 3943
+/* 351 */ MCD_OPC_Decode, 184, 3, 30, // Opcode: SRLIW
+/* 355 */ MCD_OPC_FilterValue, 32, 255, 13, 0, // Skip to: 3943
+/* 360 */ MCD_OPC_CheckPredicate, 3, 250, 13, 0, // Skip to: 3943
+/* 365 */ MCD_OPC_Decode, 179, 3, 30, // Opcode: SRAIW
+/* 369 */ MCD_OPC_FilterValue, 35, 44, 0, 0, // Skip to: 418
+/* 374 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 377 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 386
+/* 382 */ MCD_OPC_Decode, 157, 3, 31, // Opcode: SB
+/* 386 */ MCD_OPC_FilterValue, 1, 4, 0, 0, // Skip to: 395
+/* 391 */ MCD_OPC_Decode, 168, 3, 31, // Opcode: SH
+/* 395 */ MCD_OPC_FilterValue, 2, 4, 0, 0, // Skip to: 404
+/* 400 */ MCD_OPC_Decode, 188, 3, 31, // Opcode: SW
+/* 404 */ MCD_OPC_FilterValue, 3, 206, 13, 0, // Skip to: 3943
+/* 409 */ MCD_OPC_CheckPredicate, 3, 201, 13, 0, // Skip to: 3943
+/* 414 */ MCD_OPC_Decode, 166, 3, 31, // Opcode: SD
+/* 418 */ MCD_OPC_FilterValue, 39, 31, 0, 0, // Skip to: 454
+/* 423 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 426 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 440
+/* 431 */ MCD_OPC_CheckPredicate, 4, 179, 13, 0, // Skip to: 3943
+/* 436 */ MCD_OPC_Decode, 254, 2, 32, // Opcode: FSW
+/* 440 */ MCD_OPC_FilterValue, 3, 170, 13, 0, // Skip to: 3943
+/* 445 */ MCD_OPC_CheckPredicate, 5, 165, 13, 0, // Skip to: 3943
+/* 450 */ MCD_OPC_Decode, 243, 2, 33, // Opcode: FSD
+/* 454 */ MCD_OPC_FilterValue, 47, 107, 6, 0, // Skip to: 2102
+/* 459 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 462 */ MCD_OPC_FilterValue, 0, 31, 0, 0, // Skip to: 498
+/* 467 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 470 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 484
+/* 475 */ MCD_OPC_CheckPredicate, 6, 135, 13, 0, // Skip to: 3943
+/* 480 */ MCD_OPC_Decode, 186, 1, 34, // Opcode: AMOADD_W
+/* 484 */ MCD_OPC_FilterValue, 3, 126, 13, 0, // Skip to: 3943
+/* 489 */ MCD_OPC_CheckPredicate, 7, 121, 13, 0, // Skip to: 3943
+/* 494 */ MCD_OPC_Decode, 182, 1, 34, // Opcode: AMOADD_D
+/* 498 */ MCD_OPC_FilterValue, 1, 31, 0, 0, // Skip to: 534
+/* 503 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 506 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 520
+/* 511 */ MCD_OPC_CheckPredicate, 6, 99, 13, 0, // Skip to: 3943
+/* 516 */ MCD_OPC_Decode, 189, 1, 34, // Opcode: AMOADD_W_RL
+/* 520 */ MCD_OPC_FilterValue, 3, 90, 13, 0, // Skip to: 3943
+/* 525 */ MCD_OPC_CheckPredicate, 7, 85, 13, 0, // Skip to: 3943
+/* 530 */ MCD_OPC_Decode, 185, 1, 34, // Opcode: AMOADD_D_RL
+/* 534 */ MCD_OPC_FilterValue, 2, 31, 0, 0, // Skip to: 570
+/* 539 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 542 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 556
+/* 547 */ MCD_OPC_CheckPredicate, 6, 63, 13, 0, // Skip to: 3943
+/* 552 */ MCD_OPC_Decode, 187, 1, 34, // Opcode: AMOADD_W_AQ
+/* 556 */ MCD_OPC_FilterValue, 3, 54, 13, 0, // Skip to: 3943
+/* 561 */ MCD_OPC_CheckPredicate, 7, 49, 13, 0, // Skip to: 3943
+/* 566 */ MCD_OPC_Decode, 183, 1, 34, // Opcode: AMOADD_D_AQ
+/* 570 */ MCD_OPC_FilterValue, 3, 31, 0, 0, // Skip to: 606
+/* 575 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 578 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 592
+/* 583 */ MCD_OPC_CheckPredicate, 6, 27, 13, 0, // Skip to: 3943
+/* 588 */ MCD_OPC_Decode, 188, 1, 34, // Opcode: AMOADD_W_AQ_RL
+/* 592 */ MCD_OPC_FilterValue, 3, 18, 13, 0, // Skip to: 3943
+/* 597 */ MCD_OPC_CheckPredicate, 7, 13, 13, 0, // Skip to: 3943
+/* 602 */ MCD_OPC_Decode, 184, 1, 34, // Opcode: AMOADD_D_AQ_RL
+/* 606 */ MCD_OPC_FilterValue, 4, 31, 0, 0, // Skip to: 642
+/* 611 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 614 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 628
+/* 619 */ MCD_OPC_CheckPredicate, 6, 247, 12, 0, // Skip to: 3943
+/* 624 */ MCD_OPC_Decode, 242, 1, 34, // Opcode: AMOSWAP_W
+/* 628 */ MCD_OPC_FilterValue, 3, 238, 12, 0, // Skip to: 3943
+/* 633 */ MCD_OPC_CheckPredicate, 7, 233, 12, 0, // Skip to: 3943
+/* 638 */ MCD_OPC_Decode, 238, 1, 34, // Opcode: AMOSWAP_D
+/* 642 */ MCD_OPC_FilterValue, 5, 31, 0, 0, // Skip to: 678
+/* 647 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 650 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 664
+/* 655 */ MCD_OPC_CheckPredicate, 6, 211, 12, 0, // Skip to: 3943
+/* 660 */ MCD_OPC_Decode, 245, 1, 34, // Opcode: AMOSWAP_W_RL
+/* 664 */ MCD_OPC_FilterValue, 3, 202, 12, 0, // Skip to: 3943
+/* 669 */ MCD_OPC_CheckPredicate, 7, 197, 12, 0, // Skip to: 3943
+/* 674 */ MCD_OPC_Decode, 241, 1, 34, // Opcode: AMOSWAP_D_RL
+/* 678 */ MCD_OPC_FilterValue, 6, 31, 0, 0, // Skip to: 714
+/* 683 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 686 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 700
+/* 691 */ MCD_OPC_CheckPredicate, 6, 175, 12, 0, // Skip to: 3943
+/* 696 */ MCD_OPC_Decode, 243, 1, 34, // Opcode: AMOSWAP_W_AQ
+/* 700 */ MCD_OPC_FilterValue, 3, 166, 12, 0, // Skip to: 3943
+/* 705 */ MCD_OPC_CheckPredicate, 7, 161, 12, 0, // Skip to: 3943
+/* 710 */ MCD_OPC_Decode, 239, 1, 34, // Opcode: AMOSWAP_D_AQ
+/* 714 */ MCD_OPC_FilterValue, 7, 31, 0, 0, // Skip to: 750
+/* 719 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 722 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 736
+/* 727 */ MCD_OPC_CheckPredicate, 6, 139, 12, 0, // Skip to: 3943
+/* 732 */ MCD_OPC_Decode, 244, 1, 34, // Opcode: AMOSWAP_W_AQ_RL
+/* 736 */ MCD_OPC_FilterValue, 3, 130, 12, 0, // Skip to: 3943
+/* 741 */ MCD_OPC_CheckPredicate, 7, 125, 12, 0, // Skip to: 3943
+/* 746 */ MCD_OPC_Decode, 240, 1, 34, // Opcode: AMOSWAP_D_AQ_RL
+/* 750 */ MCD_OPC_FilterValue, 8, 45, 0, 0, // Skip to: 800
+/* 755 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 758 */ MCD_OPC_FilterValue, 2, 16, 0, 0, // Skip to: 779
+/* 763 */ MCD_OPC_CheckPredicate, 6, 103, 12, 0, // Skip to: 3943
+/* 768 */ MCD_OPC_CheckField, 20, 5, 0, 96, 12, 0, // Skip to: 3943
+/* 775 */ MCD_OPC_Decode, 138, 3, 35, // Opcode: LR_W
+/* 779 */ MCD_OPC_FilterValue, 3, 87, 12, 0, // Skip to: 3943
+/* 784 */ MCD_OPC_CheckPredicate, 7, 82, 12, 0, // Skip to: 3943
+/* 789 */ MCD_OPC_CheckField, 20, 5, 0, 75, 12, 0, // Skip to: 3943
+/* 796 */ MCD_OPC_Decode, 134, 3, 35, // Opcode: LR_D
+/* 800 */ MCD_OPC_FilterValue, 9, 45, 0, 0, // Skip to: 850
+/* 805 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 808 */ MCD_OPC_FilterValue, 2, 16, 0, 0, // Skip to: 829
+/* 813 */ MCD_OPC_CheckPredicate, 6, 53, 12, 0, // Skip to: 3943
+/* 818 */ MCD_OPC_CheckField, 20, 5, 0, 46, 12, 0, // Skip to: 3943
+/* 825 */ MCD_OPC_Decode, 141, 3, 35, // Opcode: LR_W_RL
+/* 829 */ MCD_OPC_FilterValue, 3, 37, 12, 0, // Skip to: 3943
+/* 834 */ MCD_OPC_CheckPredicate, 7, 32, 12, 0, // Skip to: 3943
+/* 839 */ MCD_OPC_CheckField, 20, 5, 0, 25, 12, 0, // Skip to: 3943
+/* 846 */ MCD_OPC_Decode, 137, 3, 35, // Opcode: LR_D_RL
+/* 850 */ MCD_OPC_FilterValue, 10, 45, 0, 0, // Skip to: 900
+/* 855 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 858 */ MCD_OPC_FilterValue, 2, 16, 0, 0, // Skip to: 879
+/* 863 */ MCD_OPC_CheckPredicate, 6, 3, 12, 0, // Skip to: 3943
+/* 868 */ MCD_OPC_CheckField, 20, 5, 0, 252, 11, 0, // Skip to: 3943
+/* 875 */ MCD_OPC_Decode, 139, 3, 35, // Opcode: LR_W_AQ
+/* 879 */ MCD_OPC_FilterValue, 3, 243, 11, 0, // Skip to: 3943
+/* 884 */ MCD_OPC_CheckPredicate, 7, 238, 11, 0, // Skip to: 3943
+/* 889 */ MCD_OPC_CheckField, 20, 5, 0, 231, 11, 0, // Skip to: 3943
+/* 896 */ MCD_OPC_Decode, 135, 3, 35, // Opcode: LR_D_AQ
+/* 900 */ MCD_OPC_FilterValue, 11, 45, 0, 0, // Skip to: 950
+/* 905 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 908 */ MCD_OPC_FilterValue, 2, 16, 0, 0, // Skip to: 929
+/* 913 */ MCD_OPC_CheckPredicate, 6, 209, 11, 0, // Skip to: 3943
+/* 918 */ MCD_OPC_CheckField, 20, 5, 0, 202, 11, 0, // Skip to: 3943
+/* 925 */ MCD_OPC_Decode, 140, 3, 35, // Opcode: LR_W_AQ_RL
+/* 929 */ MCD_OPC_FilterValue, 3, 193, 11, 0, // Skip to: 3943
+/* 934 */ MCD_OPC_CheckPredicate, 7, 188, 11, 0, // Skip to: 3943
+/* 939 */ MCD_OPC_CheckField, 20, 5, 0, 181, 11, 0, // Skip to: 3943
+/* 946 */ MCD_OPC_Decode, 136, 3, 35, // Opcode: LR_D_AQ_RL
+/* 950 */ MCD_OPC_FilterValue, 12, 31, 0, 0, // Skip to: 986
+/* 955 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 958 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 972
+/* 963 */ MCD_OPC_CheckPredicate, 6, 159, 11, 0, // Skip to: 3943
+/* 968 */ MCD_OPC_Decode, 162, 3, 34, // Opcode: SC_W
+/* 972 */ MCD_OPC_FilterValue, 3, 150, 11, 0, // Skip to: 3943
+/* 977 */ MCD_OPC_CheckPredicate, 7, 145, 11, 0, // Skip to: 3943
+/* 982 */ MCD_OPC_Decode, 158, 3, 34, // Opcode: SC_D
+/* 986 */ MCD_OPC_FilterValue, 13, 31, 0, 0, // Skip to: 1022
+/* 991 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 994 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1008
+/* 999 */ MCD_OPC_CheckPredicate, 6, 123, 11, 0, // Skip to: 3943
+/* 1004 */ MCD_OPC_Decode, 165, 3, 34, // Opcode: SC_W_RL
+/* 1008 */ MCD_OPC_FilterValue, 3, 114, 11, 0, // Skip to: 3943
+/* 1013 */ MCD_OPC_CheckPredicate, 7, 109, 11, 0, // Skip to: 3943
+/* 1018 */ MCD_OPC_Decode, 161, 3, 34, // Opcode: SC_D_RL
+/* 1022 */ MCD_OPC_FilterValue, 14, 31, 0, 0, // Skip to: 1058
+/* 1027 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1030 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1044
+/* 1035 */ MCD_OPC_CheckPredicate, 6, 87, 11, 0, // Skip to: 3943
+/* 1040 */ MCD_OPC_Decode, 163, 3, 34, // Opcode: SC_W_AQ
+/* 1044 */ MCD_OPC_FilterValue, 3, 78, 11, 0, // Skip to: 3943
+/* 1049 */ MCD_OPC_CheckPredicate, 7, 73, 11, 0, // Skip to: 3943
+/* 1054 */ MCD_OPC_Decode, 159, 3, 34, // Opcode: SC_D_AQ
+/* 1058 */ MCD_OPC_FilterValue, 15, 31, 0, 0, // Skip to: 1094
+/* 1063 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1066 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1080
+/* 1071 */ MCD_OPC_CheckPredicate, 6, 51, 11, 0, // Skip to: 3943
+/* 1076 */ MCD_OPC_Decode, 164, 3, 34, // Opcode: SC_W_AQ_RL
+/* 1080 */ MCD_OPC_FilterValue, 3, 42, 11, 0, // Skip to: 3943
+/* 1085 */ MCD_OPC_CheckPredicate, 7, 37, 11, 0, // Skip to: 3943
+/* 1090 */ MCD_OPC_Decode, 160, 3, 34, // Opcode: SC_D_AQ_RL
+/* 1094 */ MCD_OPC_FilterValue, 16, 31, 0, 0, // Skip to: 1130
+/* 1099 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1102 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1116
+/* 1107 */ MCD_OPC_CheckPredicate, 6, 15, 11, 0, // Skip to: 3943
+/* 1112 */ MCD_OPC_Decode, 250, 1, 34, // Opcode: AMOXOR_W
+/* 1116 */ MCD_OPC_FilterValue, 3, 6, 11, 0, // Skip to: 3943
+/* 1121 */ MCD_OPC_CheckPredicate, 7, 1, 11, 0, // Skip to: 3943
+/* 1126 */ MCD_OPC_Decode, 246, 1, 34, // Opcode: AMOXOR_D
+/* 1130 */ MCD_OPC_FilterValue, 17, 31, 0, 0, // Skip to: 1166
+/* 1135 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1138 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1152
+/* 1143 */ MCD_OPC_CheckPredicate, 6, 235, 10, 0, // Skip to: 3943
+/* 1148 */ MCD_OPC_Decode, 253, 1, 34, // Opcode: AMOXOR_W_RL
+/* 1152 */ MCD_OPC_FilterValue, 3, 226, 10, 0, // Skip to: 3943
+/* 1157 */ MCD_OPC_CheckPredicate, 7, 221, 10, 0, // Skip to: 3943
+/* 1162 */ MCD_OPC_Decode, 249, 1, 34, // Opcode: AMOXOR_D_RL
+/* 1166 */ MCD_OPC_FilterValue, 18, 31, 0, 0, // Skip to: 1202
+/* 1171 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1174 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1188
+/* 1179 */ MCD_OPC_CheckPredicate, 6, 199, 10, 0, // Skip to: 3943
+/* 1184 */ MCD_OPC_Decode, 251, 1, 34, // Opcode: AMOXOR_W_AQ
+/* 1188 */ MCD_OPC_FilterValue, 3, 190, 10, 0, // Skip to: 3943
+/* 1193 */ MCD_OPC_CheckPredicate, 7, 185, 10, 0, // Skip to: 3943
+/* 1198 */ MCD_OPC_Decode, 247, 1, 34, // Opcode: AMOXOR_D_AQ
+/* 1202 */ MCD_OPC_FilterValue, 19, 31, 0, 0, // Skip to: 1238
+/* 1207 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1210 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1224
+/* 1215 */ MCD_OPC_CheckPredicate, 6, 163, 10, 0, // Skip to: 3943
+/* 1220 */ MCD_OPC_Decode, 252, 1, 34, // Opcode: AMOXOR_W_AQ_RL
+/* 1224 */ MCD_OPC_FilterValue, 3, 154, 10, 0, // Skip to: 3943
+/* 1229 */ MCD_OPC_CheckPredicate, 7, 149, 10, 0, // Skip to: 3943
+/* 1234 */ MCD_OPC_Decode, 248, 1, 34, // Opcode: AMOXOR_D_AQ_RL
+/* 1238 */ MCD_OPC_FilterValue, 32, 31, 0, 0, // Skip to: 1274
+/* 1243 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1246 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1260
+/* 1251 */ MCD_OPC_CheckPredicate, 6, 127, 10, 0, // Skip to: 3943
+/* 1256 */ MCD_OPC_Decode, 234, 1, 34, // Opcode: AMOOR_W
+/* 1260 */ MCD_OPC_FilterValue, 3, 118, 10, 0, // Skip to: 3943
+/* 1265 */ MCD_OPC_CheckPredicate, 7, 113, 10, 0, // Skip to: 3943
+/* 1270 */ MCD_OPC_Decode, 230, 1, 34, // Opcode: AMOOR_D
+/* 1274 */ MCD_OPC_FilterValue, 33, 31, 0, 0, // Skip to: 1310
+/* 1279 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1282 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1296
+/* 1287 */ MCD_OPC_CheckPredicate, 6, 91, 10, 0, // Skip to: 3943
+/* 1292 */ MCD_OPC_Decode, 237, 1, 34, // Opcode: AMOOR_W_RL
+/* 1296 */ MCD_OPC_FilterValue, 3, 82, 10, 0, // Skip to: 3943
+/* 1301 */ MCD_OPC_CheckPredicate, 7, 77, 10, 0, // Skip to: 3943
+/* 1306 */ MCD_OPC_Decode, 233, 1, 34, // Opcode: AMOOR_D_RL
+/* 1310 */ MCD_OPC_FilterValue, 34, 31, 0, 0, // Skip to: 1346
+/* 1315 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1318 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1332
+/* 1323 */ MCD_OPC_CheckPredicate, 6, 55, 10, 0, // Skip to: 3943
+/* 1328 */ MCD_OPC_Decode, 235, 1, 34, // Opcode: AMOOR_W_AQ
+/* 1332 */ MCD_OPC_FilterValue, 3, 46, 10, 0, // Skip to: 3943
+/* 1337 */ MCD_OPC_CheckPredicate, 7, 41, 10, 0, // Skip to: 3943
+/* 1342 */ MCD_OPC_Decode, 231, 1, 34, // Opcode: AMOOR_D_AQ
+/* 1346 */ MCD_OPC_FilterValue, 35, 31, 0, 0, // Skip to: 1382
+/* 1351 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1354 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1368
+/* 1359 */ MCD_OPC_CheckPredicate, 6, 19, 10, 0, // Skip to: 3943
+/* 1364 */ MCD_OPC_Decode, 236, 1, 34, // Opcode: AMOOR_W_AQ_RL
+/* 1368 */ MCD_OPC_FilterValue, 3, 10, 10, 0, // Skip to: 3943
+/* 1373 */ MCD_OPC_CheckPredicate, 7, 5, 10, 0, // Skip to: 3943
+/* 1378 */ MCD_OPC_Decode, 232, 1, 34, // Opcode: AMOOR_D_AQ_RL
+/* 1382 */ MCD_OPC_FilterValue, 48, 31, 0, 0, // Skip to: 1418
+/* 1387 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1390 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1404
+/* 1395 */ MCD_OPC_CheckPredicate, 6, 239, 9, 0, // Skip to: 3943
+/* 1400 */ MCD_OPC_Decode, 194, 1, 34, // Opcode: AMOAND_W
+/* 1404 */ MCD_OPC_FilterValue, 3, 230, 9, 0, // Skip to: 3943
+/* 1409 */ MCD_OPC_CheckPredicate, 7, 225, 9, 0, // Skip to: 3943
+/* 1414 */ MCD_OPC_Decode, 190, 1, 34, // Opcode: AMOAND_D
+/* 1418 */ MCD_OPC_FilterValue, 49, 31, 0, 0, // Skip to: 1454
+/* 1423 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1426 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1440
+/* 1431 */ MCD_OPC_CheckPredicate, 6, 203, 9, 0, // Skip to: 3943
+/* 1436 */ MCD_OPC_Decode, 197, 1, 34, // Opcode: AMOAND_W_RL
+/* 1440 */ MCD_OPC_FilterValue, 3, 194, 9, 0, // Skip to: 3943
+/* 1445 */ MCD_OPC_CheckPredicate, 7, 189, 9, 0, // Skip to: 3943
+/* 1450 */ MCD_OPC_Decode, 193, 1, 34, // Opcode: AMOAND_D_RL
+/* 1454 */ MCD_OPC_FilterValue, 50, 31, 0, 0, // Skip to: 1490
+/* 1459 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1462 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1476
+/* 1467 */ MCD_OPC_CheckPredicate, 6, 167, 9, 0, // Skip to: 3943
+/* 1472 */ MCD_OPC_Decode, 195, 1, 34, // Opcode: AMOAND_W_AQ
+/* 1476 */ MCD_OPC_FilterValue, 3, 158, 9, 0, // Skip to: 3943
+/* 1481 */ MCD_OPC_CheckPredicate, 7, 153, 9, 0, // Skip to: 3943
+/* 1486 */ MCD_OPC_Decode, 191, 1, 34, // Opcode: AMOAND_D_AQ
+/* 1490 */ MCD_OPC_FilterValue, 51, 31, 0, 0, // Skip to: 1526
+/* 1495 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1498 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1512
+/* 1503 */ MCD_OPC_CheckPredicate, 6, 131, 9, 0, // Skip to: 3943
+/* 1508 */ MCD_OPC_Decode, 196, 1, 34, // Opcode: AMOAND_W_AQ_RL
+/* 1512 */ MCD_OPC_FilterValue, 3, 122, 9, 0, // Skip to: 3943
+/* 1517 */ MCD_OPC_CheckPredicate, 7, 117, 9, 0, // Skip to: 3943
+/* 1522 */ MCD_OPC_Decode, 192, 1, 34, // Opcode: AMOAND_D_AQ_RL
+/* 1526 */ MCD_OPC_FilterValue, 64, 31, 0, 0, // Skip to: 1562
+/* 1531 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1534 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1548
+/* 1539 */ MCD_OPC_CheckPredicate, 6, 95, 9, 0, // Skip to: 3943
+/* 1544 */ MCD_OPC_Decode, 226, 1, 34, // Opcode: AMOMIN_W
+/* 1548 */ MCD_OPC_FilterValue, 3, 86, 9, 0, // Skip to: 3943
+/* 1553 */ MCD_OPC_CheckPredicate, 7, 81, 9, 0, // Skip to: 3943
+/* 1558 */ MCD_OPC_Decode, 222, 1, 34, // Opcode: AMOMIN_D
+/* 1562 */ MCD_OPC_FilterValue, 65, 31, 0, 0, // Skip to: 1598
+/* 1567 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1570 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1584
+/* 1575 */ MCD_OPC_CheckPredicate, 6, 59, 9, 0, // Skip to: 3943
+/* 1580 */ MCD_OPC_Decode, 229, 1, 34, // Opcode: AMOMIN_W_RL
+/* 1584 */ MCD_OPC_FilterValue, 3, 50, 9, 0, // Skip to: 3943
+/* 1589 */ MCD_OPC_CheckPredicate, 7, 45, 9, 0, // Skip to: 3943
+/* 1594 */ MCD_OPC_Decode, 225, 1, 34, // Opcode: AMOMIN_D_RL
+/* 1598 */ MCD_OPC_FilterValue, 66, 31, 0, 0, // Skip to: 1634
+/* 1603 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1606 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1620
+/* 1611 */ MCD_OPC_CheckPredicate, 6, 23, 9, 0, // Skip to: 3943
+/* 1616 */ MCD_OPC_Decode, 227, 1, 34, // Opcode: AMOMIN_W_AQ
+/* 1620 */ MCD_OPC_FilterValue, 3, 14, 9, 0, // Skip to: 3943
+/* 1625 */ MCD_OPC_CheckPredicate, 7, 9, 9, 0, // Skip to: 3943
+/* 1630 */ MCD_OPC_Decode, 223, 1, 34, // Opcode: AMOMIN_D_AQ
+/* 1634 */ MCD_OPC_FilterValue, 67, 31, 0, 0, // Skip to: 1670
+/* 1639 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1642 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1656
+/* 1647 */ MCD_OPC_CheckPredicate, 6, 243, 8, 0, // Skip to: 3943
+/* 1652 */ MCD_OPC_Decode, 228, 1, 34, // Opcode: AMOMIN_W_AQ_RL
+/* 1656 */ MCD_OPC_FilterValue, 3, 234, 8, 0, // Skip to: 3943
+/* 1661 */ MCD_OPC_CheckPredicate, 7, 229, 8, 0, // Skip to: 3943
+/* 1666 */ MCD_OPC_Decode, 224, 1, 34, // Opcode: AMOMIN_D_AQ_RL
+/* 1670 */ MCD_OPC_FilterValue, 80, 31, 0, 0, // Skip to: 1706
+/* 1675 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1678 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1692
+/* 1683 */ MCD_OPC_CheckPredicate, 6, 207, 8, 0, // Skip to: 3943
+/* 1688 */ MCD_OPC_Decode, 210, 1, 34, // Opcode: AMOMAX_W
+/* 1692 */ MCD_OPC_FilterValue, 3, 198, 8, 0, // Skip to: 3943
+/* 1697 */ MCD_OPC_CheckPredicate, 7, 193, 8, 0, // Skip to: 3943
+/* 1702 */ MCD_OPC_Decode, 206, 1, 34, // Opcode: AMOMAX_D
+/* 1706 */ MCD_OPC_FilterValue, 81, 31, 0, 0, // Skip to: 1742
+/* 1711 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1714 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1728
+/* 1719 */ MCD_OPC_CheckPredicate, 6, 171, 8, 0, // Skip to: 3943
+/* 1724 */ MCD_OPC_Decode, 213, 1, 34, // Opcode: AMOMAX_W_RL
+/* 1728 */ MCD_OPC_FilterValue, 3, 162, 8, 0, // Skip to: 3943
+/* 1733 */ MCD_OPC_CheckPredicate, 7, 157, 8, 0, // Skip to: 3943
+/* 1738 */ MCD_OPC_Decode, 209, 1, 34, // Opcode: AMOMAX_D_RL
+/* 1742 */ MCD_OPC_FilterValue, 82, 31, 0, 0, // Skip to: 1778
+/* 1747 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1750 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1764
+/* 1755 */ MCD_OPC_CheckPredicate, 6, 135, 8, 0, // Skip to: 3943
+/* 1760 */ MCD_OPC_Decode, 211, 1, 34, // Opcode: AMOMAX_W_AQ
+/* 1764 */ MCD_OPC_FilterValue, 3, 126, 8, 0, // Skip to: 3943
+/* 1769 */ MCD_OPC_CheckPredicate, 7, 121, 8, 0, // Skip to: 3943
+/* 1774 */ MCD_OPC_Decode, 207, 1, 34, // Opcode: AMOMAX_D_AQ
+/* 1778 */ MCD_OPC_FilterValue, 83, 31, 0, 0, // Skip to: 1814
+/* 1783 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1786 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1800
+/* 1791 */ MCD_OPC_CheckPredicate, 6, 99, 8, 0, // Skip to: 3943
+/* 1796 */ MCD_OPC_Decode, 212, 1, 34, // Opcode: AMOMAX_W_AQ_RL
+/* 1800 */ MCD_OPC_FilterValue, 3, 90, 8, 0, // Skip to: 3943
+/* 1805 */ MCD_OPC_CheckPredicate, 7, 85, 8, 0, // Skip to: 3943
+/* 1810 */ MCD_OPC_Decode, 208, 1, 34, // Opcode: AMOMAX_D_AQ_RL
+/* 1814 */ MCD_OPC_FilterValue, 96, 31, 0, 0, // Skip to: 1850
+/* 1819 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1822 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1836
+/* 1827 */ MCD_OPC_CheckPredicate, 6, 63, 8, 0, // Skip to: 3943
+/* 1832 */ MCD_OPC_Decode, 218, 1, 34, // Opcode: AMOMINU_W
+/* 1836 */ MCD_OPC_FilterValue, 3, 54, 8, 0, // Skip to: 3943
+/* 1841 */ MCD_OPC_CheckPredicate, 7, 49, 8, 0, // Skip to: 3943
+/* 1846 */ MCD_OPC_Decode, 214, 1, 34, // Opcode: AMOMINU_D
+/* 1850 */ MCD_OPC_FilterValue, 97, 31, 0, 0, // Skip to: 1886
+/* 1855 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1858 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1872
+/* 1863 */ MCD_OPC_CheckPredicate, 6, 27, 8, 0, // Skip to: 3943
+/* 1868 */ MCD_OPC_Decode, 221, 1, 34, // Opcode: AMOMINU_W_RL
+/* 1872 */ MCD_OPC_FilterValue, 3, 18, 8, 0, // Skip to: 3943
+/* 1877 */ MCD_OPC_CheckPredicate, 7, 13, 8, 0, // Skip to: 3943
+/* 1882 */ MCD_OPC_Decode, 217, 1, 34, // Opcode: AMOMINU_D_RL
+/* 1886 */ MCD_OPC_FilterValue, 98, 31, 0, 0, // Skip to: 1922
+/* 1891 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1894 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1908
+/* 1899 */ MCD_OPC_CheckPredicate, 6, 247, 7, 0, // Skip to: 3943
+/* 1904 */ MCD_OPC_Decode, 219, 1, 34, // Opcode: AMOMINU_W_AQ
+/* 1908 */ MCD_OPC_FilterValue, 3, 238, 7, 0, // Skip to: 3943
+/* 1913 */ MCD_OPC_CheckPredicate, 7, 233, 7, 0, // Skip to: 3943
+/* 1918 */ MCD_OPC_Decode, 215, 1, 34, // Opcode: AMOMINU_D_AQ
+/* 1922 */ MCD_OPC_FilterValue, 99, 31, 0, 0, // Skip to: 1958
+/* 1927 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1930 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1944
+/* 1935 */ MCD_OPC_CheckPredicate, 6, 211, 7, 0, // Skip to: 3943
+/* 1940 */ MCD_OPC_Decode, 220, 1, 34, // Opcode: AMOMINU_W_AQ_RL
+/* 1944 */ MCD_OPC_FilterValue, 3, 202, 7, 0, // Skip to: 3943
+/* 1949 */ MCD_OPC_CheckPredicate, 7, 197, 7, 0, // Skip to: 3943
+/* 1954 */ MCD_OPC_Decode, 216, 1, 34, // Opcode: AMOMINU_D_AQ_RL
+/* 1958 */ MCD_OPC_FilterValue, 112, 31, 0, 0, // Skip to: 1994
+/* 1963 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 1966 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 1980
+/* 1971 */ MCD_OPC_CheckPredicate, 6, 175, 7, 0, // Skip to: 3943
+/* 1976 */ MCD_OPC_Decode, 202, 1, 34, // Opcode: AMOMAXU_W
+/* 1980 */ MCD_OPC_FilterValue, 3, 166, 7, 0, // Skip to: 3943
+/* 1985 */ MCD_OPC_CheckPredicate, 7, 161, 7, 0, // Skip to: 3943
+/* 1990 */ MCD_OPC_Decode, 198, 1, 34, // Opcode: AMOMAXU_D
+/* 1994 */ MCD_OPC_FilterValue, 113, 31, 0, 0, // Skip to: 2030
+/* 1999 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2002 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 2016
+/* 2007 */ MCD_OPC_CheckPredicate, 6, 139, 7, 0, // Skip to: 3943
+/* 2012 */ MCD_OPC_Decode, 205, 1, 34, // Opcode: AMOMAXU_W_RL
+/* 2016 */ MCD_OPC_FilterValue, 3, 130, 7, 0, // Skip to: 3943
+/* 2021 */ MCD_OPC_CheckPredicate, 7, 125, 7, 0, // Skip to: 3943
+/* 2026 */ MCD_OPC_Decode, 201, 1, 34, // Opcode: AMOMAXU_D_RL
+/* 2030 */ MCD_OPC_FilterValue, 114, 31, 0, 0, // Skip to: 2066
+/* 2035 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2038 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 2052
+/* 2043 */ MCD_OPC_CheckPredicate, 6, 103, 7, 0, // Skip to: 3943
+/* 2048 */ MCD_OPC_Decode, 203, 1, 34, // Opcode: AMOMAXU_W_AQ
+/* 2052 */ MCD_OPC_FilterValue, 3, 94, 7, 0, // Skip to: 3943
+/* 2057 */ MCD_OPC_CheckPredicate, 7, 89, 7, 0, // Skip to: 3943
+/* 2062 */ MCD_OPC_Decode, 199, 1, 34, // Opcode: AMOMAXU_D_AQ
+/* 2066 */ MCD_OPC_FilterValue, 115, 80, 7, 0, // Skip to: 3943
+/* 2071 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2074 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 2088
+/* 2079 */ MCD_OPC_CheckPredicate, 6, 67, 7, 0, // Skip to: 3943
+/* 2084 */ MCD_OPC_Decode, 204, 1, 34, // Opcode: AMOMAXU_W_AQ_RL
+/* 2088 */ MCD_OPC_FilterValue, 3, 58, 7, 0, // Skip to: 3943
+/* 2093 */ MCD_OPC_CheckPredicate, 7, 53, 7, 0, // Skip to: 3943
+/* 2098 */ MCD_OPC_Decode, 200, 1, 34, // Opcode: AMOMAXU_D_AQ_RL
+/* 2102 */ MCD_OPC_FilterValue, 51, 13, 1, 0, // Skip to: 2376
+/* 2107 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2110 */ MCD_OPC_FilterValue, 0, 35, 0, 0, // Skip to: 2150
+/* 2115 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2118 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2127
+/* 2123 */ MCD_OPC_Decode, 178, 1, 34, // Opcode: ADD
+/* 2127 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2141
+/* 2132 */ MCD_OPC_CheckPredicate, 8, 14, 7, 0, // Skip to: 3943
+/* 2137 */ MCD_OPC_Decode, 146, 3, 34, // Opcode: MUL
+/* 2141 */ MCD_OPC_FilterValue, 32, 5, 7, 0, // Skip to: 3943
+/* 2146 */ MCD_OPC_Decode, 186, 3, 34, // Opcode: SUB
+/* 2150 */ MCD_OPC_FilterValue, 1, 26, 0, 0, // Skip to: 2181
+/* 2155 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2158 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2167
+/* 2163 */ MCD_OPC_Decode, 169, 3, 34, // Opcode: SLL
+/* 2167 */ MCD_OPC_FilterValue, 1, 235, 6, 0, // Skip to: 3943
+/* 2172 */ MCD_OPC_CheckPredicate, 8, 230, 6, 0, // Skip to: 3943
+/* 2177 */ MCD_OPC_Decode, 147, 3, 34, // Opcode: MULH
+/* 2181 */ MCD_OPC_FilterValue, 2, 26, 0, 0, // Skip to: 2212
+/* 2186 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2189 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2198
+/* 2194 */ MCD_OPC_Decode, 173, 3, 34, // Opcode: SLT
+/* 2198 */ MCD_OPC_FilterValue, 1, 204, 6, 0, // Skip to: 3943
+/* 2203 */ MCD_OPC_CheckPredicate, 8, 199, 6, 0, // Skip to: 3943
+/* 2208 */ MCD_OPC_Decode, 148, 3, 34, // Opcode: MULHSU
+/* 2212 */ MCD_OPC_FilterValue, 3, 26, 0, 0, // Skip to: 2243
+/* 2217 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2220 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2229
+/* 2225 */ MCD_OPC_Decode, 176, 3, 34, // Opcode: SLTU
+/* 2229 */ MCD_OPC_FilterValue, 1, 173, 6, 0, // Skip to: 3943
+/* 2234 */ MCD_OPC_CheckPredicate, 8, 168, 6, 0, // Skip to: 3943
+/* 2239 */ MCD_OPC_Decode, 149, 3, 34, // Opcode: MULHU
+/* 2243 */ MCD_OPC_FilterValue, 4, 26, 0, 0, // Skip to: 2274
+/* 2248 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2251 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2260
+/* 2256 */ MCD_OPC_Decode, 192, 3, 34, // Opcode: XOR
+/* 2260 */ MCD_OPC_FilterValue, 1, 142, 6, 0, // Skip to: 3943
+/* 2265 */ MCD_OPC_CheckPredicate, 8, 137, 6, 0, // Skip to: 3943
+/* 2270 */ MCD_OPC_Decode, 184, 2, 34, // Opcode: DIV
+/* 2274 */ MCD_OPC_FilterValue, 5, 35, 0, 0, // Skip to: 2314
+/* 2279 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2282 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2291
+/* 2287 */ MCD_OPC_Decode, 182, 3, 34, // Opcode: SRL
+/* 2291 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2305
+/* 2296 */ MCD_OPC_CheckPredicate, 8, 106, 6, 0, // Skip to: 3943
+/* 2301 */ MCD_OPC_Decode, 185, 2, 34, // Opcode: DIVU
+/* 2305 */ MCD_OPC_FilterValue, 32, 97, 6, 0, // Skip to: 3943
+/* 2310 */ MCD_OPC_Decode, 177, 3, 34, // Opcode: SRA
+/* 2314 */ MCD_OPC_FilterValue, 6, 26, 0, 0, // Skip to: 2345
+/* 2319 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2322 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2331
+/* 2327 */ MCD_OPC_Decode, 151, 3, 34, // Opcode: OR
+/* 2331 */ MCD_OPC_FilterValue, 1, 71, 6, 0, // Skip to: 3943
+/* 2336 */ MCD_OPC_CheckPredicate, 8, 66, 6, 0, // Skip to: 3943
+/* 2341 */ MCD_OPC_Decode, 153, 3, 34, // Opcode: REM
+/* 2345 */ MCD_OPC_FilterValue, 7, 57, 6, 0, // Skip to: 3943
+/* 2350 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2353 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 2362
+/* 2358 */ MCD_OPC_Decode, 254, 1, 34, // Opcode: AND
+/* 2362 */ MCD_OPC_FilterValue, 1, 40, 6, 0, // Skip to: 3943
+/* 2367 */ MCD_OPC_CheckPredicate, 8, 35, 6, 0, // Skip to: 3943
+/* 2372 */ MCD_OPC_Decode, 154, 3, 34, // Opcode: REMU
+/* 2376 */ MCD_OPC_FilterValue, 55, 4, 0, 0, // Skip to: 2385
+/* 2381 */ MCD_OPC_Decode, 142, 3, 29, // Opcode: LUI
+/* 2385 */ MCD_OPC_FilterValue, 59, 187, 0, 0, // Skip to: 2577
+/* 2390 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2393 */ MCD_OPC_FilterValue, 0, 45, 0, 0, // Skip to: 2443
+/* 2398 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2401 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2415
+/* 2406 */ MCD_OPC_CheckPredicate, 3, 252, 5, 0, // Skip to: 3943
+/* 2411 */ MCD_OPC_Decode, 181, 1, 34, // Opcode: ADDW
+/* 2415 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2429
+/* 2420 */ MCD_OPC_CheckPredicate, 9, 238, 5, 0, // Skip to: 3943
+/* 2425 */ MCD_OPC_Decode, 150, 3, 34, // Opcode: MULW
+/* 2429 */ MCD_OPC_FilterValue, 32, 229, 5, 0, // Skip to: 3943
+/* 2434 */ MCD_OPC_CheckPredicate, 3, 224, 5, 0, // Skip to: 3943
+/* 2439 */ MCD_OPC_Decode, 187, 3, 34, // Opcode: SUBW
+/* 2443 */ MCD_OPC_FilterValue, 1, 16, 0, 0, // Skip to: 2464
+/* 2448 */ MCD_OPC_CheckPredicate, 3, 210, 5, 0, // Skip to: 3943
+/* 2453 */ MCD_OPC_CheckField, 25, 7, 0, 203, 5, 0, // Skip to: 3943
+/* 2460 */ MCD_OPC_Decode, 172, 3, 34, // Opcode: SLLW
+/* 2464 */ MCD_OPC_FilterValue, 4, 16, 0, 0, // Skip to: 2485
+/* 2469 */ MCD_OPC_CheckPredicate, 9, 189, 5, 0, // Skip to: 3943
+/* 2474 */ MCD_OPC_CheckField, 25, 7, 1, 182, 5, 0, // Skip to: 3943
+/* 2481 */ MCD_OPC_Decode, 187, 2, 34, // Opcode: DIVW
+/* 2485 */ MCD_OPC_FilterValue, 5, 45, 0, 0, // Skip to: 2535
+/* 2490 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2493 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2507
+/* 2498 */ MCD_OPC_CheckPredicate, 3, 160, 5, 0, // Skip to: 3943
+/* 2503 */ MCD_OPC_Decode, 185, 3, 34, // Opcode: SRLW
+/* 2507 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2521
+/* 2512 */ MCD_OPC_CheckPredicate, 9, 146, 5, 0, // Skip to: 3943
+/* 2517 */ MCD_OPC_Decode, 186, 2, 34, // Opcode: DIVUW
+/* 2521 */ MCD_OPC_FilterValue, 32, 137, 5, 0, // Skip to: 3943
+/* 2526 */ MCD_OPC_CheckPredicate, 3, 132, 5, 0, // Skip to: 3943
+/* 2531 */ MCD_OPC_Decode, 180, 3, 34, // Opcode: SRAW
+/* 2535 */ MCD_OPC_FilterValue, 6, 16, 0, 0, // Skip to: 2556
+/* 2540 */ MCD_OPC_CheckPredicate, 9, 118, 5, 0, // Skip to: 3943
+/* 2545 */ MCD_OPC_CheckField, 25, 7, 1, 111, 5, 0, // Skip to: 3943
+/* 2552 */ MCD_OPC_Decode, 156, 3, 34, // Opcode: REMW
+/* 2556 */ MCD_OPC_FilterValue, 7, 102, 5, 0, // Skip to: 3943
+/* 2561 */ MCD_OPC_CheckPredicate, 9, 97, 5, 0, // Skip to: 3943
+/* 2566 */ MCD_OPC_CheckField, 25, 7, 1, 90, 5, 0, // Skip to: 3943
+/* 2573 */ MCD_OPC_Decode, 155, 3, 34, // Opcode: REMUW
+/* 2577 */ MCD_OPC_FilterValue, 67, 31, 0, 0, // Skip to: 2613
+/* 2582 */ MCD_OPC_ExtractField, 25, 2, // Inst{26-25} ...
+/* 2585 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2599
+/* 2590 */ MCD_OPC_CheckPredicate, 4, 68, 5, 0, // Skip to: 3943
+/* 2595 */ MCD_OPC_Decode, 226, 2, 36, // Opcode: FMADD_S
+/* 2599 */ MCD_OPC_FilterValue, 1, 59, 5, 0, // Skip to: 3943
+/* 2604 */ MCD_OPC_CheckPredicate, 5, 54, 5, 0, // Skip to: 3943
+/* 2609 */ MCD_OPC_Decode, 225, 2, 37, // Opcode: FMADD_D
+/* 2613 */ MCD_OPC_FilterValue, 71, 31, 0, 0, // Skip to: 2649
+/* 2618 */ MCD_OPC_ExtractField, 25, 2, // Inst{26-25} ...
+/* 2621 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2635
+/* 2626 */ MCD_OPC_CheckPredicate, 4, 32, 5, 0, // Skip to: 3943
+/* 2631 */ MCD_OPC_Decode, 232, 2, 36, // Opcode: FMSUB_S
+/* 2635 */ MCD_OPC_FilterValue, 1, 23, 5, 0, // Skip to: 3943
+/* 2640 */ MCD_OPC_CheckPredicate, 5, 18, 5, 0, // Skip to: 3943
+/* 2645 */ MCD_OPC_Decode, 231, 2, 37, // Opcode: FMSUB_D
+/* 2649 */ MCD_OPC_FilterValue, 75, 31, 0, 0, // Skip to: 2685
+/* 2654 */ MCD_OPC_ExtractField, 25, 2, // Inst{26-25} ...
+/* 2657 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2671
+/* 2662 */ MCD_OPC_CheckPredicate, 4, 252, 4, 0, // Skip to: 3943
+/* 2667 */ MCD_OPC_Decode, 242, 2, 36, // Opcode: FNMSUB_S
+/* 2671 */ MCD_OPC_FilterValue, 1, 243, 4, 0, // Skip to: 3943
+/* 2676 */ MCD_OPC_CheckPredicate, 5, 238, 4, 0, // Skip to: 3943
+/* 2681 */ MCD_OPC_Decode, 241, 2, 37, // Opcode: FNMSUB_D
+/* 2685 */ MCD_OPC_FilterValue, 79, 31, 0, 0, // Skip to: 2721
+/* 2690 */ MCD_OPC_ExtractField, 25, 2, // Inst{26-25} ...
+/* 2693 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2707
+/* 2698 */ MCD_OPC_CheckPredicate, 4, 216, 4, 0, // Skip to: 3943
+/* 2703 */ MCD_OPC_Decode, 240, 2, 36, // Opcode: FNMADD_S
+/* 2707 */ MCD_OPC_FilterValue, 1, 207, 4, 0, // Skip to: 3943
+/* 2712 */ MCD_OPC_CheckPredicate, 5, 202, 4, 0, // Skip to: 3943
+/* 2717 */ MCD_OPC_Decode, 239, 2, 37, // Opcode: FNMADD_D
+/* 2721 */ MCD_OPC_FilterValue, 83, 136, 3, 0, // Skip to: 3630
+/* 2726 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 2729 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2743
+/* 2734 */ MCD_OPC_CheckPredicate, 4, 180, 4, 0, // Skip to: 3943
+/* 2739 */ MCD_OPC_Decode, 191, 2, 38, // Opcode: FADD_S
+/* 2743 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2757
+/* 2748 */ MCD_OPC_CheckPredicate, 5, 166, 4, 0, // Skip to: 3943
+/* 2753 */ MCD_OPC_Decode, 190, 2, 39, // Opcode: FADD_D
+/* 2757 */ MCD_OPC_FilterValue, 4, 9, 0, 0, // Skip to: 2771
+/* 2762 */ MCD_OPC_CheckPredicate, 4, 152, 4, 0, // Skip to: 3943
+/* 2767 */ MCD_OPC_Decode, 253, 2, 38, // Opcode: FSUB_S
+/* 2771 */ MCD_OPC_FilterValue, 5, 9, 0, 0, // Skip to: 2785
+/* 2776 */ MCD_OPC_CheckPredicate, 5, 138, 4, 0, // Skip to: 3943
+/* 2781 */ MCD_OPC_Decode, 252, 2, 39, // Opcode: FSUB_D
+/* 2785 */ MCD_OPC_FilterValue, 8, 9, 0, 0, // Skip to: 2799
+/* 2790 */ MCD_OPC_CheckPredicate, 4, 124, 4, 0, // Skip to: 3943
+/* 2795 */ MCD_OPC_Decode, 234, 2, 38, // Opcode: FMUL_S
+/* 2799 */ MCD_OPC_FilterValue, 9, 9, 0, 0, // Skip to: 2813
+/* 2804 */ MCD_OPC_CheckPredicate, 5, 110, 4, 0, // Skip to: 3943
+/* 2809 */ MCD_OPC_Decode, 233, 2, 39, // Opcode: FMUL_D
+/* 2813 */ MCD_OPC_FilterValue, 12, 9, 0, 0, // Skip to: 2827
+/* 2818 */ MCD_OPC_CheckPredicate, 4, 96, 4, 0, // Skip to: 3943
+/* 2823 */ MCD_OPC_Decode, 213, 2, 38, // Opcode: FDIV_S
+/* 2827 */ MCD_OPC_FilterValue, 13, 9, 0, 0, // Skip to: 2841
+/* 2832 */ MCD_OPC_CheckPredicate, 5, 82, 4, 0, // Skip to: 3943
+/* 2837 */ MCD_OPC_Decode, 212, 2, 39, // Opcode: FDIV_D
+/* 2841 */ MCD_OPC_FilterValue, 16, 45, 0, 0, // Skip to: 2891
+/* 2846 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2849 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2863
+/* 2854 */ MCD_OPC_CheckPredicate, 4, 60, 4, 0, // Skip to: 3943
+/* 2859 */ MCD_OPC_Decode, 249, 2, 40, // Opcode: FSGNJ_S
+/* 2863 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2877
+/* 2868 */ MCD_OPC_CheckPredicate, 4, 46, 4, 0, // Skip to: 3943
+/* 2873 */ MCD_OPC_Decode, 245, 2, 40, // Opcode: FSGNJN_S
+/* 2877 */ MCD_OPC_FilterValue, 2, 37, 4, 0, // Skip to: 3943
+/* 2882 */ MCD_OPC_CheckPredicate, 4, 32, 4, 0, // Skip to: 3943
+/* 2887 */ MCD_OPC_Decode, 247, 2, 40, // Opcode: FSGNJX_S
+/* 2891 */ MCD_OPC_FilterValue, 17, 45, 0, 0, // Skip to: 2941
+/* 2896 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2899 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2913
+/* 2904 */ MCD_OPC_CheckPredicate, 5, 10, 4, 0, // Skip to: 3943
+/* 2909 */ MCD_OPC_Decode, 248, 2, 41, // Opcode: FSGNJ_D
+/* 2913 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 2927
+/* 2918 */ MCD_OPC_CheckPredicate, 5, 252, 3, 0, // Skip to: 3943
+/* 2923 */ MCD_OPC_Decode, 244, 2, 41, // Opcode: FSGNJN_D
+/* 2927 */ MCD_OPC_FilterValue, 2, 243, 3, 0, // Skip to: 3943
+/* 2932 */ MCD_OPC_CheckPredicate, 5, 238, 3, 0, // Skip to: 3943
+/* 2937 */ MCD_OPC_Decode, 246, 2, 41, // Opcode: FSGNJX_D
+/* 2941 */ MCD_OPC_FilterValue, 20, 31, 0, 0, // Skip to: 2977
+/* 2946 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2949 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2963
+/* 2954 */ MCD_OPC_CheckPredicate, 4, 216, 3, 0, // Skip to: 3943
+/* 2959 */ MCD_OPC_Decode, 230, 2, 40, // Opcode: FMIN_S
+/* 2963 */ MCD_OPC_FilterValue, 1, 207, 3, 0, // Skip to: 3943
+/* 2968 */ MCD_OPC_CheckPredicate, 4, 202, 3, 0, // Skip to: 3943
+/* 2973 */ MCD_OPC_Decode, 228, 2, 40, // Opcode: FMAX_S
+/* 2977 */ MCD_OPC_FilterValue, 21, 31, 0, 0, // Skip to: 3013
+/* 2982 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 2985 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 2999
+/* 2990 */ MCD_OPC_CheckPredicate, 5, 180, 3, 0, // Skip to: 3943
+/* 2995 */ MCD_OPC_Decode, 229, 2, 41, // Opcode: FMIN_D
+/* 2999 */ MCD_OPC_FilterValue, 1, 171, 3, 0, // Skip to: 3943
+/* 3004 */ MCD_OPC_CheckPredicate, 5, 166, 3, 0, // Skip to: 3943
+/* 3009 */ MCD_OPC_Decode, 227, 2, 41, // Opcode: FMAX_D
+/* 3013 */ MCD_OPC_FilterValue, 32, 16, 0, 0, // Skip to: 3034
+/* 3018 */ MCD_OPC_CheckPredicate, 5, 152, 3, 0, // Skip to: 3943
+/* 3023 */ MCD_OPC_CheckField, 20, 5, 1, 145, 3, 0, // Skip to: 3943
+/* 3030 */ MCD_OPC_Decode, 203, 2, 42, // Opcode: FCVT_S_D
+/* 3034 */ MCD_OPC_FilterValue, 33, 23, 0, 0, // Skip to: 3062
+/* 3039 */ MCD_OPC_CheckPredicate, 5, 131, 3, 0, // Skip to: 3943
+/* 3044 */ MCD_OPC_CheckField, 20, 5, 0, 124, 3, 0, // Skip to: 3943
+/* 3051 */ MCD_OPC_CheckField, 12, 3, 0, 117, 3, 0, // Skip to: 3943
+/* 3058 */ MCD_OPC_Decode, 196, 2, 43, // Opcode: FCVT_D_S
+/* 3062 */ MCD_OPC_FilterValue, 44, 16, 0, 0, // Skip to: 3083
+/* 3067 */ MCD_OPC_CheckPredicate, 4, 103, 3, 0, // Skip to: 3943
+/* 3072 */ MCD_OPC_CheckField, 20, 5, 0, 96, 3, 0, // Skip to: 3943
+/* 3079 */ MCD_OPC_Decode, 251, 2, 44, // Opcode: FSQRT_S
+/* 3083 */ MCD_OPC_FilterValue, 45, 16, 0, 0, // Skip to: 3104
+/* 3088 */ MCD_OPC_CheckPredicate, 5, 82, 3, 0, // Skip to: 3943
+/* 3093 */ MCD_OPC_CheckField, 20, 5, 0, 75, 3, 0, // Skip to: 3943
+/* 3100 */ MCD_OPC_Decode, 250, 2, 45, // Opcode: FSQRT_D
+/* 3104 */ MCD_OPC_FilterValue, 80, 45, 0, 0, // Skip to: 3154
+/* 3109 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3112 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 3126
+/* 3117 */ MCD_OPC_CheckPredicate, 4, 53, 3, 0, // Skip to: 3943
+/* 3122 */ MCD_OPC_Decode, 221, 2, 46, // Opcode: FLE_S
+/* 3126 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 3140
+/* 3131 */ MCD_OPC_CheckPredicate, 4, 39, 3, 0, // Skip to: 3943
+/* 3136 */ MCD_OPC_Decode, 223, 2, 46, // Opcode: FLT_S
+/* 3140 */ MCD_OPC_FilterValue, 2, 30, 3, 0, // Skip to: 3943
+/* 3145 */ MCD_OPC_CheckPredicate, 4, 25, 3, 0, // Skip to: 3943
+/* 3150 */ MCD_OPC_Decode, 218, 2, 46, // Opcode: FEQ_S
+/* 3154 */ MCD_OPC_FilterValue, 81, 45, 0, 0, // Skip to: 3204
+/* 3159 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3162 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 3176
+/* 3167 */ MCD_OPC_CheckPredicate, 5, 3, 3, 0, // Skip to: 3943
+/* 3172 */ MCD_OPC_Decode, 220, 2, 47, // Opcode: FLE_D
+/* 3176 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 3190
+/* 3181 */ MCD_OPC_CheckPredicate, 5, 245, 2, 0, // Skip to: 3943
+/* 3186 */ MCD_OPC_Decode, 222, 2, 47, // Opcode: FLT_D
+/* 3190 */ MCD_OPC_FilterValue, 2, 236, 2, 0, // Skip to: 3943
+/* 3195 */ MCD_OPC_CheckPredicate, 5, 231, 2, 0, // Skip to: 3943
+/* 3200 */ MCD_OPC_Decode, 217, 2, 47, // Opcode: FEQ_D
+/* 3204 */ MCD_OPC_FilterValue, 96, 59, 0, 0, // Skip to: 3268
+/* 3209 */ MCD_OPC_ExtractField, 20, 5, // Inst{24-20} ...
+/* 3212 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 3226
+/* 3217 */ MCD_OPC_CheckPredicate, 4, 209, 2, 0, // Skip to: 3943
+/* 3222 */ MCD_OPC_Decode, 211, 2, 48, // Opcode: FCVT_W_S
+/* 3226 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 3240
+/* 3231 */ MCD_OPC_CheckPredicate, 4, 195, 2, 0, // Skip to: 3943
+/* 3236 */ MCD_OPC_Decode, 209, 2, 48, // Opcode: FCVT_WU_S
+/* 3240 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 3254
+/* 3245 */ MCD_OPC_CheckPredicate, 10, 181, 2, 0, // Skip to: 3943
+/* 3250 */ MCD_OPC_Decode, 202, 2, 48, // Opcode: FCVT_L_S
+/* 3254 */ MCD_OPC_FilterValue, 3, 172, 2, 0, // Skip to: 3943
+/* 3259 */ MCD_OPC_CheckPredicate, 10, 167, 2, 0, // Skip to: 3943
+/* 3264 */ MCD_OPC_Decode, 200, 2, 48, // Opcode: FCVT_LU_S
+/* 3268 */ MCD_OPC_FilterValue, 97, 59, 0, 0, // Skip to: 3332
+/* 3273 */ MCD_OPC_ExtractField, 20, 5, // Inst{24-20} ...
+/* 3276 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 3290
+/* 3281 */ MCD_OPC_CheckPredicate, 5, 145, 2, 0, // Skip to: 3943
+/* 3286 */ MCD_OPC_Decode, 210, 2, 49, // Opcode: FCVT_W_D
+/* 3290 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 3304
+/* 3295 */ MCD_OPC_CheckPredicate, 5, 131, 2, 0, // Skip to: 3943
+/* 3300 */ MCD_OPC_Decode, 208, 2, 49, // Opcode: FCVT_WU_D
+/* 3304 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 3318
+/* 3309 */ MCD_OPC_CheckPredicate, 11, 117, 2, 0, // Skip to: 3943
+/* 3314 */ MCD_OPC_Decode, 201, 2, 49, // Opcode: FCVT_L_D
+/* 3318 */ MCD_OPC_FilterValue, 3, 108, 2, 0, // Skip to: 3943
+/* 3323 */ MCD_OPC_CheckPredicate, 11, 103, 2, 0, // Skip to: 3943
+/* 3328 */ MCD_OPC_Decode, 199, 2, 49, // Opcode: FCVT_LU_D
+/* 3332 */ MCD_OPC_FilterValue, 104, 59, 0, 0, // Skip to: 3396
+/* 3337 */ MCD_OPC_ExtractField, 20, 5, // Inst{24-20} ...
+/* 3340 */ MCD_OPC_FilterValue, 0, 9, 0, 0, // Skip to: 3354
+/* 3345 */ MCD_OPC_CheckPredicate, 4, 81, 2, 0, // Skip to: 3943
+/* 3350 */ MCD_OPC_Decode, 206, 2, 50, // Opcode: FCVT_S_W
+/* 3354 */ MCD_OPC_FilterValue, 1, 9, 0, 0, // Skip to: 3368
+/* 3359 */ MCD_OPC_CheckPredicate, 4, 67, 2, 0, // Skip to: 3943
+/* 3364 */ MCD_OPC_Decode, 207, 2, 50, // Opcode: FCVT_S_WU
+/* 3368 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 3382
+/* 3373 */ MCD_OPC_CheckPredicate, 10, 53, 2, 0, // Skip to: 3943
+/* 3378 */ MCD_OPC_Decode, 204, 2, 50, // Opcode: FCVT_S_L
+/* 3382 */ MCD_OPC_FilterValue, 3, 44, 2, 0, // Skip to: 3943
+/* 3387 */ MCD_OPC_CheckPredicate, 10, 39, 2, 0, // Skip to: 3943
+/* 3392 */ MCD_OPC_Decode, 205, 2, 50, // Opcode: FCVT_S_LU
+/* 3396 */ MCD_OPC_FilterValue, 105, 73, 0, 0, // Skip to: 3474
+/* 3401 */ MCD_OPC_ExtractField, 20, 5, // Inst{24-20} ...
+/* 3404 */ MCD_OPC_FilterValue, 0, 16, 0, 0, // Skip to: 3425
+/* 3409 */ MCD_OPC_CheckPredicate, 5, 17, 2, 0, // Skip to: 3943
+/* 3414 */ MCD_OPC_CheckField, 12, 3, 0, 10, 2, 0, // Skip to: 3943
+/* 3421 */ MCD_OPC_Decode, 197, 2, 51, // Opcode: FCVT_D_W
+/* 3425 */ MCD_OPC_FilterValue, 1, 16, 0, 0, // Skip to: 3446
+/* 3430 */ MCD_OPC_CheckPredicate, 5, 252, 1, 0, // Skip to: 3943
+/* 3435 */ MCD_OPC_CheckField, 12, 3, 0, 245, 1, 0, // Skip to: 3943
+/* 3442 */ MCD_OPC_Decode, 198, 2, 51, // Opcode: FCVT_D_WU
+/* 3446 */ MCD_OPC_FilterValue, 2, 9, 0, 0, // Skip to: 3460
+/* 3451 */ MCD_OPC_CheckPredicate, 11, 231, 1, 0, // Skip to: 3943
+/* 3456 */ MCD_OPC_Decode, 194, 2, 52, // Opcode: FCVT_D_L
+/* 3460 */ MCD_OPC_FilterValue, 3, 222, 1, 0, // Skip to: 3943
+/* 3465 */ MCD_OPC_CheckPredicate, 11, 217, 1, 0, // Skip to: 3943
+/* 3470 */ MCD_OPC_Decode, 195, 2, 52, // Opcode: FCVT_D_LU
+/* 3474 */ MCD_OPC_FilterValue, 112, 45, 0, 0, // Skip to: 3524
+/* 3479 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3482 */ MCD_OPC_FilterValue, 0, 16, 0, 0, // Skip to: 3503
+/* 3487 */ MCD_OPC_CheckPredicate, 4, 195, 1, 0, // Skip to: 3943
+/* 3492 */ MCD_OPC_CheckField, 20, 5, 0, 188, 1, 0, // Skip to: 3943
+/* 3499 */ MCD_OPC_Decode, 238, 2, 53, // Opcode: FMV_X_W
+/* 3503 */ MCD_OPC_FilterValue, 1, 179, 1, 0, // Skip to: 3943
+/* 3508 */ MCD_OPC_CheckPredicate, 4, 174, 1, 0, // Skip to: 3943
+/* 3513 */ MCD_OPC_CheckField, 20, 5, 0, 167, 1, 0, // Skip to: 3943
+/* 3520 */ MCD_OPC_Decode, 193, 2, 53, // Opcode: FCLASS_S
+/* 3524 */ MCD_OPC_FilterValue, 113, 45, 0, 0, // Skip to: 3574
+/* 3529 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3532 */ MCD_OPC_FilterValue, 0, 16, 0, 0, // Skip to: 3553
+/* 3537 */ MCD_OPC_CheckPredicate, 11, 145, 1, 0, // Skip to: 3943
+/* 3542 */ MCD_OPC_CheckField, 20, 5, 0, 138, 1, 0, // Skip to: 3943
+/* 3549 */ MCD_OPC_Decode, 237, 2, 54, // Opcode: FMV_X_D
+/* 3553 */ MCD_OPC_FilterValue, 1, 129, 1, 0, // Skip to: 3943
+/* 3558 */ MCD_OPC_CheckPredicate, 5, 124, 1, 0, // Skip to: 3943
+/* 3563 */ MCD_OPC_CheckField, 20, 5, 0, 117, 1, 0, // Skip to: 3943
+/* 3570 */ MCD_OPC_Decode, 192, 2, 54, // Opcode: FCLASS_D
+/* 3574 */ MCD_OPC_FilterValue, 120, 23, 0, 0, // Skip to: 3602
+/* 3579 */ MCD_OPC_CheckPredicate, 4, 103, 1, 0, // Skip to: 3943
+/* 3584 */ MCD_OPC_CheckField, 20, 5, 0, 96, 1, 0, // Skip to: 3943
+/* 3591 */ MCD_OPC_CheckField, 12, 3, 0, 89, 1, 0, // Skip to: 3943
+/* 3598 */ MCD_OPC_Decode, 236, 2, 55, // Opcode: FMV_W_X
+/* 3602 */ MCD_OPC_FilterValue, 121, 80, 1, 0, // Skip to: 3943
+/* 3607 */ MCD_OPC_CheckPredicate, 11, 75, 1, 0, // Skip to: 3943
+/* 3612 */ MCD_OPC_CheckField, 20, 5, 0, 68, 1, 0, // Skip to: 3943
+/* 3619 */ MCD_OPC_CheckField, 12, 3, 0, 61, 1, 0, // Skip to: 3943
+/* 3626 */ MCD_OPC_Decode, 235, 2, 51, // Opcode: FMV_D_X
+/* 3630 */ MCD_OPC_FilterValue, 99, 57, 0, 0, // Skip to: 3692
+/* 3635 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3638 */ MCD_OPC_FilterValue, 0, 4, 0, 0, // Skip to: 3647
+/* 3643 */ MCD_OPC_Decode, 129, 2, 56, // Opcode: BEQ
+/* 3647 */ MCD_OPC_FilterValue, 1, 4, 0, 0, // Skip to: 3656
+/* 3652 */ MCD_OPC_Decode, 134, 2, 56, // Opcode: BNE
+/* 3656 */ MCD_OPC_FilterValue, 4, 4, 0, 0, // Skip to: 3665
+/* 3661 */ MCD_OPC_Decode, 132, 2, 56, // Opcode: BLT
+/* 3665 */ MCD_OPC_FilterValue, 5, 4, 0, 0, // Skip to: 3674
+/* 3670 */ MCD_OPC_Decode, 130, 2, 56, // Opcode: BGE
+/* 3674 */ MCD_OPC_FilterValue, 6, 4, 0, 0, // Skip to: 3683
+/* 3679 */ MCD_OPC_Decode, 133, 2, 56, // Opcode: BLTU
+/* 3683 */ MCD_OPC_FilterValue, 7, 255, 0, 0, // Skip to: 3943
+/* 3688 */ MCD_OPC_Decode, 131, 2, 56, // Opcode: BGEU
+/* 3692 */ MCD_OPC_FilterValue, 103, 11, 0, 0, // Skip to: 3708
+/* 3697 */ MCD_OPC_CheckField, 12, 3, 0, 239, 0, 0, // Skip to: 3943
+/* 3704 */ MCD_OPC_Decode, 128, 3, 24, // Opcode: JALR
+/* 3708 */ MCD_OPC_FilterValue, 111, 4, 0, 0, // Skip to: 3717
+/* 3713 */ MCD_OPC_Decode, 255, 2, 57, // Opcode: JAL
+/* 3717 */ MCD_OPC_FilterValue, 115, 221, 0, 0, // Skip to: 3943
+/* 3722 */ MCD_OPC_ExtractField, 12, 3, // Inst{14-12} ...
+/* 3725 */ MCD_OPC_FilterValue, 0, 139, 0, 0, // Skip to: 3869
+/* 3730 */ MCD_OPC_ExtractField, 25, 7, // Inst{31-25} ...
+/* 3733 */ MCD_OPC_FilterValue, 0, 51, 0, 0, // Skip to: 3789
+/* 3738 */ MCD_OPC_ExtractField, 15, 10, // Inst{24-15} ...
+/* 3741 */ MCD_OPC_FilterValue, 0, 11, 0, 0, // Skip to: 3757
+/* 3746 */ MCD_OPC_CheckField, 7, 5, 0, 190, 0, 0, // Skip to: 3943
+/* 3753 */ MCD_OPC_Decode, 189, 2, 0, // Opcode: ECALL
+/* 3757 */ MCD_OPC_FilterValue, 32, 11, 0, 0, // Skip to: 3773
+/* 3762 */ MCD_OPC_CheckField, 7, 5, 0, 174, 0, 0, // Skip to: 3943
+/* 3769 */ MCD_OPC_Decode, 188, 2, 0, // Opcode: EBREAK
+/* 3773 */ MCD_OPC_FilterValue, 64, 165, 0, 0, // Skip to: 3943
+/* 3778 */ MCD_OPC_CheckField, 7, 5, 0, 158, 0, 0, // Skip to: 3943
+/* 3785 */ MCD_OPC_Decode, 190, 3, 0, // Opcode: URET
+/* 3789 */ MCD_OPC_FilterValue, 8, 36, 0, 0, // Skip to: 3830
+/* 3794 */ MCD_OPC_ExtractField, 15, 10, // Inst{24-15} ...
+/* 3797 */ MCD_OPC_FilterValue, 64, 11, 0, 0, // Skip to: 3813
+/* 3802 */ MCD_OPC_CheckField, 7, 5, 0, 134, 0, 0, // Skip to: 3943
+/* 3809 */ MCD_OPC_Decode, 181, 3, 0, // Opcode: SRET
+/* 3813 */ MCD_OPC_FilterValue, 160, 1, 124, 0, 0, // Skip to: 3943
+/* 3819 */ MCD_OPC_CheckField, 7, 5, 0, 117, 0, 0, // Skip to: 3943
+/* 3826 */ MCD_OPC_Decode, 191, 3, 0, // Opcode: WFI
+/* 3830 */ MCD_OPC_FilterValue, 9, 11, 0, 0, // Skip to: 3846
+/* 3835 */ MCD_OPC_CheckField, 7, 5, 0, 101, 0, 0, // Skip to: 3943
+/* 3842 */ MCD_OPC_Decode, 167, 3, 58, // Opcode: SFENCE_VMA
+/* 3846 */ MCD_OPC_FilterValue, 24, 92, 0, 0, // Skip to: 3943
+/* 3851 */ MCD_OPC_CheckField, 15, 10, 64, 85, 0, 0, // Skip to: 3943
+/* 3858 */ MCD_OPC_CheckField, 7, 5, 0, 78, 0, 0, // Skip to: 3943
+/* 3865 */ MCD_OPC_Decode, 145, 3, 0, // Opcode: MRET
+/* 3869 */ MCD_OPC_FilterValue, 1, 24, 0, 0, // Skip to: 3898
+/* 3874 */ MCD_OPC_CheckField, 15, 17, 128, 128, 6, 11, 0, 0, // Skip to: 3894
+/* 3883 */ MCD_OPC_CheckField, 7, 5, 0, 4, 0, 0, // Skip to: 3894
+/* 3890 */ MCD_OPC_Decode, 189, 3, 0, // Opcode: UNIMP
+/* 3894 */ MCD_OPC_Decode, 139, 2, 59, // Opcode: CSRRW
+/* 3898 */ MCD_OPC_FilterValue, 2, 4, 0, 0, // Skip to: 3907
+/* 3903 */ MCD_OPC_Decode, 137, 2, 59, // Opcode: CSRRS
+/* 3907 */ MCD_OPC_FilterValue, 3, 4, 0, 0, // Skip to: 3916
+/* 3912 */ MCD_OPC_Decode, 135, 2, 59, // Opcode: CSRRC
+/* 3916 */ MCD_OPC_FilterValue, 5, 4, 0, 0, // Skip to: 3925
+/* 3921 */ MCD_OPC_Decode, 140, 2, 60, // Opcode: CSRRWI
+/* 3925 */ MCD_OPC_FilterValue, 6, 4, 0, 0, // Skip to: 3934
+/* 3930 */ MCD_OPC_Decode, 138, 2, 60, // Opcode: CSRRSI
+/* 3934 */ MCD_OPC_FilterValue, 7, 4, 0, 0, // Skip to: 3943
+/* 3939 */ MCD_OPC_Decode, 136, 2, 60, // Opcode: CSRRCI
+/* 3943 */ MCD_OPC_Fail,
+ 0
+};
+
+static const uint8_t DecoderTableRISCV32Only_16[] = {
+/* 0 */ MCD_OPC_ExtractField, 0, 2, // Inst{1-0} ...
+/* 3 */ MCD_OPC_FilterValue, 0, 31, 0, 0, // Skip to: 39
+/* 8 */ MCD_OPC_ExtractField, 13, 3, // Inst{15-13} ...
+/* 11 */ MCD_OPC_FilterValue, 3, 9, 0, 0, // Skip to: 25
+/* 16 */ MCD_OPC_CheckPredicate, 12, 75, 0, 0, // Skip to: 96
+/* 21 */ MCD_OPC_Decode, 154, 2, 61, // Opcode: C_FLW
+/* 25 */ MCD_OPC_FilterValue, 7, 66, 0, 0, // Skip to: 96
+/* 30 */ MCD_OPC_CheckPredicate, 12, 61, 0, 0, // Skip to: 96
+/* 35 */ MCD_OPC_Decode, 158, 2, 61, // Opcode: C_FSW
+/* 39 */ MCD_OPC_FilterValue, 1, 16, 0, 0, // Skip to: 60
+/* 44 */ MCD_OPC_CheckPredicate, 13, 47, 0, 0, // Skip to: 96
+/* 49 */ MCD_OPC_CheckField, 13, 3, 1, 40, 0, 0, // Skip to: 96
+/* 56 */ MCD_OPC_Decode, 161, 2, 19, // Opcode: C_JAL
+/* 60 */ MCD_OPC_FilterValue, 2, 31, 0, 0, // Skip to: 96
+/* 65 */ MCD_OPC_ExtractField, 13, 3, // Inst{15-13} ...
+/* 68 */ MCD_OPC_FilterValue, 3, 9, 0, 0, // Skip to: 82
+/* 73 */ MCD_OPC_CheckPredicate, 12, 18, 0, 0, // Skip to: 96
+/* 78 */ MCD_OPC_Decode, 155, 2, 62, // Opcode: C_FLWSP
+/* 82 */ MCD_OPC_FilterValue, 7, 9, 0, 0, // Skip to: 96
+/* 87 */ MCD_OPC_CheckPredicate, 12, 4, 0, 0, // Skip to: 96
+/* 92 */ MCD_OPC_Decode, 159, 2, 63, // Opcode: C_FSWSP
+/* 96 */ MCD_OPC_Fail,
+ 0
+};
+
+static bool checkDecoderPredicate(unsigned Idx, uint64_t Bits)
+{
+ switch (Idx) {
+ default: CS_ASSERT(0 && "Invalid index!");
+ case 0:
+ return (Bits & RISCV_FeatureStdExtC);
+ case 1:
+ return (Bits & RISCV_FeatureStdExtC) && (Bits & RISCV_FeatureStdExtD);
+ case 2:
+ return (Bits & RISCV_FeatureStdExtC) && (Bits & RISCV_Feature64Bit);
+ case 3:
+ return (Bits & RISCV_Feature64Bit);
+ case 4:
+ return (Bits & RISCV_FeatureStdExtF);
+ case 5:
+ return (Bits & RISCV_FeatureStdExtD);
+ case 6:
+ return (Bits & RISCV_FeatureStdExtA);
+ case 7:
+ return (Bits & RISCV_FeatureStdExtA) && (Bits & RISCV_Feature64Bit);
+ case 8:
+ return (Bits & RISCV_FeatureStdExtM);
+ case 9:
+ return (Bits & RISCV_FeatureStdExtM) && (Bits & RISCV_Feature64Bit);
+ case 10:
+ return (Bits & RISCV_FeatureStdExtF) && (Bits & RISCV_Feature64Bit);
+ case 11:
+ return (Bits & RISCV_FeatureStdExtD) && (Bits & RISCV_Feature64Bit);
+ case 12:
+ return (Bits & RISCV_FeatureStdExtC) && (Bits & RISCV_FeatureStdExtF) && !(Bits & RISCV_Feature64Bit);
+ case 13:
+ return (Bits & RISCV_FeatureStdExtC) && !(Bits & RISCV_Feature64Bit);
+ }
+}
+
+#define DecodeToMCInst(fname, fieldname, InsnType) \
+static DecodeStatus fname(DecodeStatus S, unsigned Idx, InsnType insn, MCInst *MI, \
+ uint64_t Address, const void *Decoder,\
+ bool *DecodeComplete) {\
+ *DecodeComplete = true;\
+ InsnType tmp; \
+ switch (Idx) { \
+ default: CS_ASSERT(0 && "Invalid index!");\
+ case 0: \
+ return S; \
+ case 1: \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 5, 1) << 3; \
+ tmp |= fieldname(insn, 6, 1) << 2; \
+ tmp |= fieldname(insn, 7, 4) << 6; \
+ tmp |= fieldname(insn, 11, 2) << 4; \
+ if (decodeUImmNonZeroOperand(MI, tmp, Address, Decoder, 10) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 2: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 3: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 4: \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeFPR64CRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 5, 2) << 6; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 5: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 3) << 6; \
+ tmp |= fieldname(insn, 5, 2) << 3; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 9) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 6: \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 5, 1) << 6; \
+ tmp |= fieldname(insn, 6, 1) << 2; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 7) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 7: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 8: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 2) << 6; \
+ tmp |= fieldname(insn, 4, 3) << 2; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 9: \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 5, 2) << 6; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 10: \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 1) << 5; \
+ tmp |= fieldname(insn, 3, 2) << 7; \
+ tmp |= fieldname(insn, 5, 1) << 6; \
+ tmp |= fieldname(insn, 6, 1) << 4; \
+ tmp |= fieldname(insn, 12, 1) << 9; \
+ if (decodeSImmNonZeroOperand(MI, tmp, Address, Decoder, 10) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 11: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0X2RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeCLUIImmOperand(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 12: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 3) << 6; \
+ tmp |= fieldname(insn, 5, 2) << 3; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 9) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 13: \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 14: \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 5) << 0; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 15: \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 16: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 17: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 18: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeGPRNoX0RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 19: \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 1) << 4; \
+ tmp |= fieldname(insn, 3, 3) << 0; \
+ tmp |= fieldname(insn, 6, 1) << 6; \
+ tmp |= fieldname(insn, 7, 1) << 5; \
+ tmp |= fieldname(insn, 8, 1) << 9; \
+ tmp |= fieldname(insn, 9, 2) << 7; \
+ tmp |= fieldname(insn, 11, 1) << 3; \
+ tmp |= fieldname(insn, 12, 1) << 10; \
+ if (decodeSImmOperandAndLsl1(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 20: \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 3) << 6; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 9) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 21: \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 1) << 4; \
+ tmp |= fieldname(insn, 3, 2) << 0; \
+ tmp |= fieldname(insn, 5, 2) << 5; \
+ tmp |= fieldname(insn, 10, 2) << 2; \
+ tmp |= fieldname(insn, 12, 1) << 7; \
+ if (decodeSImmOperandAndLsl1(MI, tmp, Address, Decoder, 9) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 22: \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 2) << 6; \
+ tmp |= fieldname(insn, 9, 4) << 2; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 23: \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 3) << 6; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 9) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 24: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 12); \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 25: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 12); \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 26: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 12); \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 27: \
+ tmp = fieldname(insn, 24, 4); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 4) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 4); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 4) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 28: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 6); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 6) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 29: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 20); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 20) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 30: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 5) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 31: \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 5) << 0; \
+ tmp |= fieldname(insn, 25, 7) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 32: \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 5) << 0; \
+ tmp |= fieldname(insn, 25, 7) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 33: \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 5) << 0; \
+ tmp |= fieldname(insn, 25, 7) << 5; \
+ if (decodeSImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 34: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 35: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 36: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 27, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 37: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 27, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 38: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 39: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 40: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 41: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 42: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 43: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 44: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 45: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 46: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 47: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 48: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 49: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 50: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 51: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 52: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 12, 3); \
+ if (decodeFRMArg(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 53: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 54: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeFPR64RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 55: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 56: \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 1) << 10; \
+ tmp |= fieldname(insn, 8, 4) << 0; \
+ tmp |= fieldname(insn, 25, 6) << 4; \
+ tmp |= fieldname(insn, 31, 1) << 11; \
+ if (decodeSImmOperandAndLsl1(MI, tmp, Address, Decoder, 13) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 57: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 12, 8) << 11; \
+ tmp |= fieldname(insn, 20, 1) << 10; \
+ tmp |= fieldname(insn, 21, 10) << 0; \
+ tmp |= fieldname(insn, 31, 1) << 19; \
+ if (decodeSImmOperandAndLsl1(MI, tmp, Address, Decoder, 21) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 58: \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 59: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 12); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 60: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeGPRRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 20, 12); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 12) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 15, 5); \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 5) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 61: \
+ tmp = fieldname(insn, 2, 3); \
+ if (DecodeFPR32CRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = fieldname(insn, 7, 3); \
+ if (DecodeGPRCRegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 5, 1) << 6; \
+ tmp |= fieldname(insn, 6, 1) << 2; \
+ tmp |= fieldname(insn, 10, 3) << 3; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 7) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 62: \
+ tmp = fieldname(insn, 7, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 2, 2) << 6; \
+ tmp |= fieldname(insn, 4, 3) << 2; \
+ tmp |= fieldname(insn, 12, 1) << 5; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ case 63: \
+ tmp = fieldname(insn, 2, 5); \
+ if (DecodeFPR32RegisterClass(MI, tmp, Address, Decoder) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ tmp = 0; \
+ tmp |= fieldname(insn, 7, 2) << 6; \
+ tmp |= fieldname(insn, 9, 4) << 2; \
+ if (decodeUImmOperand(MI, tmp, Address, Decoder, 8) == MCDisassembler_Fail) return MCDisassembler_Fail; \
+ return S; \
+ } \
+}
+
+#define DecodeInstruction(fname, fieldname, decoder, InsnType) \
+static DecodeStatus fname(const uint8_t DecodeTable[], MCInst *MI,\
+ InsnType insn, uint64_t Address,\
+ const void *DisAsm, int feature) {\
+ uint64_t Bits = getFeatureBits(feature);\
+\
+ const uint8_t *Ptr = DecodeTable;\
+ uint32_t CurFieldValue = 0;\
+ DecodeStatus S = MCDisassembler_Success;\
+ while (true) {\
+ switch (*Ptr) {\
+ default:\
+ return MCDisassembler_Fail;\
+ case MCD_OPC_ExtractField: {\
+ unsigned Start = *++Ptr;\
+ unsigned Len = *++Ptr;\
+ ++Ptr;\
+ CurFieldValue = fieldname(insn, Start, Len);\
+ break;\
+ }\
+ case MCD_OPC_FilterValue: {\
+ unsigned Len;\
+ InsnType Val = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ unsigned NumToSkip = *Ptr++;\
+ NumToSkip |= (*Ptr++) << 8;\
+ NumToSkip |= (*Ptr++) << 16;\
+\
+ if (Val != CurFieldValue)\
+ Ptr += NumToSkip;\
+ break;\
+ }\
+ case MCD_OPC_CheckField: {\
+ unsigned Start = *++Ptr;\
+ unsigned Len = *++Ptr;\
+ InsnType FieldValue = fieldname(insn, Start, Len);\
+ uint32_t ExpectedValue = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ unsigned NumToSkip = *Ptr++;\
+ NumToSkip |= (*Ptr++) << 8;\
+ NumToSkip |= (*Ptr++) << 16;\
+\
+ if (ExpectedValue != FieldValue)\
+ Ptr += NumToSkip;\
+ break;\
+ }\
+ case MCD_OPC_CheckPredicate: {\
+ unsigned Len;\
+ unsigned PIdx = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ unsigned NumToSkip = *Ptr++;\
+ NumToSkip |= (*Ptr++) << 8;\
+ NumToSkip |= (*Ptr++) << 16;\
+ bool Pred;\
+ if (!(Pred = checkDecoderPredicate(PIdx, Bits)))\
+ Ptr += NumToSkip;\
+ (void)Pred;\
+ break;\
+ }\
+ case MCD_OPC_Decode: {\
+ unsigned Len;\
+ unsigned Opc = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ unsigned DecodeIdx = decodeULEB128(Ptr, &Len);\
+ Ptr += Len;\
+\
+ MCInst_clear(MI);\
+ MCInst_setOpcode(MI, Opc);\
+ bool DecodeComplete;\
+ S = decoder(S, DecodeIdx, insn, MI, Address, DisAsm, &DecodeComplete);\
+ CS_ASSERT(DecodeComplete);\
+\
+ return S;\
+ }\
+ case MCD_OPC_TryDecode: {\
+ unsigned Len;\
+ unsigned Opc = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ unsigned DecodeIdx = decodeULEB128(Ptr, &Len);\
+ Ptr += Len;\
+ unsigned NumToSkip = *Ptr++;\
+ NumToSkip |= (*Ptr++) << 8;\
+ NumToSkip |= (*Ptr++) << 16;\
+\
+ MCInst TmpMI;\
+ MCInst_setOpcode(&TmpMI, Opc);\
+ bool DecodeComplete;\
+ S = decoder(S, DecodeIdx, insn, &TmpMI, Address, DisAsm, &DecodeComplete);\
+\
+ if (DecodeComplete) {\
+ *MI = TmpMI;\
+ return S;\
+ } else {\
+ CS_ASSERT(S == MCDisassembler_Fail);\
+ Ptr += NumToSkip;\
+ S = MCDisassembler_Success;\
+ }\
+ break;\
+ }\
+ case MCD_OPC_SoftFail: {\
+ unsigned Len;\
+ InsnType PositiveMask = decodeULEB128(++Ptr, &Len);\
+ Ptr += Len;\
+ InsnType NegativeMask = decodeULEB128(Ptr, &Len);\
+ Ptr += Len;\
+ bool Fail = (insn & PositiveMask) || (~insn & NegativeMask);\
+ if (Fail)\
+ S = MCDisassembler_SoftFail;\
+ break;\
+ }\
+ case MCD_OPC_Fail: {\
+ return MCDisassembler_Fail;\
+ }\
+ }\
+ }\
+ CS_ASSERT(0 && "bogosity detected in disassembler state machine!");\
+}
+
+// For RISCV instruction is 32 bits.
+FieldFromInstruction(fieldFromInstruction, uint32_t)
+DecodeToMCInst(decodeToMCInst, fieldFromInstruction, uint32_t)
+DecodeInstruction(decodeInstruction, fieldFromInstruction, decodeToMCInst, uint32_t)
diff --git a/capstone/arch/RISCV/RISCVGenInsnNameMaps.inc b/capstone/arch/RISCV/RISCVGenInsnNameMaps.inc
new file mode 100644
index 000000000..17d42bf9c
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenInsnNameMaps.inc
@@ -0,0 +1,275 @@
+// This is auto-gen data for Capstone engine (www.capstone-engine.org)
+// By Nguyen Anh Quynh <aquynh@gmail.com>
+
+ { RISCV_INS_ADD, "add" },
+ { RISCV_INS_ADDI, "addi" },
+ { RISCV_INS_ADDIW, "addiw" },
+ { RISCV_INS_ADDW, "addw" },
+ { RISCV_INS_AMOADD_D, "amoadd.d" },
+ { RISCV_INS_AMOADD_D_AQ, "amoadd.d.aq" },
+ { RISCV_INS_AMOADD_D_AQ_RL, "amoadd.d.aqrl" },
+ { RISCV_INS_AMOADD_D_RL, "amoadd.d.rl" },
+ { RISCV_INS_AMOADD_W, "amoadd.w" },
+ { RISCV_INS_AMOADD_W_AQ, "amoadd.w.aq" },
+ { RISCV_INS_AMOADD_W_AQ_RL, "amoadd.w.aqrl" },
+ { RISCV_INS_AMOADD_W_RL, "amoadd.w.rl" },
+ { RISCV_INS_AMOAND_D, "amoand.d" },
+ { RISCV_INS_AMOAND_D_AQ, "amoand.d.aq" },
+ { RISCV_INS_AMOAND_D_AQ_RL, "amoand.d.aqrl" },
+ { RISCV_INS_AMOAND_D_RL, "amoand.d.rl" },
+ { RISCV_INS_AMOAND_W, "amoand.w" },
+ { RISCV_INS_AMOAND_W_AQ, "amoand.w.aq" },
+ { RISCV_INS_AMOAND_W_AQ_RL, "amoand.w.aqrl" },
+ { RISCV_INS_AMOAND_W_RL, "amoand.w.rl" },
+ { RISCV_INS_AMOMAXU_D, "amomaxu.d" },
+ { RISCV_INS_AMOMAXU_D_AQ, "amomaxu.d.aq" },
+ { RISCV_INS_AMOMAXU_D_AQ_RL, "amomaxu.d.aqrl" },
+ { RISCV_INS_AMOMAXU_D_RL, "amomaxu.d.rl" },
+ { RISCV_INS_AMOMAXU_W, "amomaxu.w" },
+ { RISCV_INS_AMOMAXU_W_AQ, "amomaxu.w.aq" },
+ { RISCV_INS_AMOMAXU_W_AQ_RL, "amomaxu.w.aqrl" },
+ { RISCV_INS_AMOMAXU_W_RL, "amomaxu.w.rl" },
+ { RISCV_INS_AMOMAX_D, "amomax.d" },
+ { RISCV_INS_AMOMAX_D_AQ, "amomax.d.aq" },
+ { RISCV_INS_AMOMAX_D_AQ_RL, "amomax.d.aqrl" },
+ { RISCV_INS_AMOMAX_D_RL, "amomax.d.rl" },
+ { RISCV_INS_AMOMAX_W, "amomax.w" },
+ { RISCV_INS_AMOMAX_W_AQ, "amomax.w.aq" },
+ { RISCV_INS_AMOMAX_W_AQ_RL, "amomax.w.aqrl" },
+ { RISCV_INS_AMOMAX_W_RL, "amomax.w.rl" },
+ { RISCV_INS_AMOMINU_D, "amominu.d" },
+ { RISCV_INS_AMOMINU_D_AQ, "amominu.d.aq" },
+ { RISCV_INS_AMOMINU_D_AQ_RL, "amominu.d.aqrl" },
+ { RISCV_INS_AMOMINU_D_RL, "amominu.d.rl" },
+ { RISCV_INS_AMOMINU_W, "amominu.w" },
+ { RISCV_INS_AMOMINU_W_AQ, "amominu.w.aq" },
+ { RISCV_INS_AMOMINU_W_AQ_RL, "amominu.w.aqrl" },
+ { RISCV_INS_AMOMINU_W_RL, "amominu.w.rl" },
+ { RISCV_INS_AMOMIN_D, "amomin.d" },
+ { RISCV_INS_AMOMIN_D_AQ, "amomin.d.aq" },
+ { RISCV_INS_AMOMIN_D_AQ_RL, "amomin.d.aqrl" },
+ { RISCV_INS_AMOMIN_D_RL, "amomin.d.rl" },
+ { RISCV_INS_AMOMIN_W, "amomin.w" },
+ { RISCV_INS_AMOMIN_W_AQ, "amomin.w.aq" },
+ { RISCV_INS_AMOMIN_W_AQ_RL, "amomin.w.aqrl" },
+ { RISCV_INS_AMOMIN_W_RL, "amomin.w.rl" },
+ { RISCV_INS_AMOOR_D, "amoor.d" },
+ { RISCV_INS_AMOOR_D_AQ, "amoor.d.aq" },
+ { RISCV_INS_AMOOR_D_AQ_RL, "amoor.d.aqrl" },
+ { RISCV_INS_AMOOR_D_RL, "amoor.d.rl" },
+ { RISCV_INS_AMOOR_W, "amoor.w" },
+ { RISCV_INS_AMOOR_W_AQ, "amoor.w.aq" },
+ { RISCV_INS_AMOOR_W_AQ_RL, "amoor.w.aqrl" },
+ { RISCV_INS_AMOOR_W_RL, "amoor.w.rl" },
+ { RISCV_INS_AMOSWAP_D, "amoswap.d" },
+ { RISCV_INS_AMOSWAP_D_AQ, "amoswap.d.aq" },
+ { RISCV_INS_AMOSWAP_D_AQ_RL, "amoswap.d.aqrl" },
+ { RISCV_INS_AMOSWAP_D_RL, "amoswap.d.rl" },
+ { RISCV_INS_AMOSWAP_W, "amoswap.w" },
+ { RISCV_INS_AMOSWAP_W_AQ, "amoswap.w.aq" },
+ { RISCV_INS_AMOSWAP_W_AQ_RL, "amoswap.w.aqrl" },
+ { RISCV_INS_AMOSWAP_W_RL, "amoswap.w.rl" },
+ { RISCV_INS_AMOXOR_D, "amoxor.d" },
+ { RISCV_INS_AMOXOR_D_AQ, "amoxor.d.aq" },
+ { RISCV_INS_AMOXOR_D_AQ_RL, "amoxor.d.aqrl" },
+ { RISCV_INS_AMOXOR_D_RL, "amoxor.d.rl" },
+ { RISCV_INS_AMOXOR_W, "amoxor.w" },
+ { RISCV_INS_AMOXOR_W_AQ, "amoxor.w.aq" },
+ { RISCV_INS_AMOXOR_W_AQ_RL, "amoxor.w.aqrl" },
+ { RISCV_INS_AMOXOR_W_RL, "amoxor.w.rl" },
+ { RISCV_INS_AND, "and" },
+ { RISCV_INS_ANDI, "andi" },
+ { RISCV_INS_AUIPC, "auipc" },
+ { RISCV_INS_BEQ, "beq" },
+ { RISCV_INS_BGE, "bge" },
+ { RISCV_INS_BGEU, "bgeu" },
+ { RISCV_INS_BLT, "blt" },
+ { RISCV_INS_BLTU, "bltu" },
+ { RISCV_INS_BNE, "bne" },
+ { RISCV_INS_CSRRC, "csrrc" },
+ { RISCV_INS_CSRRCI, "csrrci" },
+ { RISCV_INS_CSRRS, "csrrs" },
+ { RISCV_INS_CSRRSI, "csrrsi" },
+ { RISCV_INS_CSRRW, "csrrw" },
+ { RISCV_INS_CSRRWI, "csrrwi" },
+ { RISCV_INS_C_ADD, "c.add" },
+ { RISCV_INS_C_ADDI, "c.addi" },
+ { RISCV_INS_C_ADDI16SP, "c.addi16sp" },
+ { RISCV_INS_C_ADDI4SPN, "c.addi4spn" },
+ { RISCV_INS_C_ADDIW, "c.addiw" },
+ { RISCV_INS_C_ADDW, "c.addw" },
+ { RISCV_INS_C_AND, "c.and" },
+ { RISCV_INS_C_ANDI, "c.andi" },
+ { RISCV_INS_C_BEQZ, "c.beqz" },
+ { RISCV_INS_C_BNEZ, "c.bnez" },
+ { RISCV_INS_C_EBREAK, "c.ebreak" },
+ { RISCV_INS_C_FLD, "c.fld" },
+ { RISCV_INS_C_FLDSP, "c.fldsp" },
+ { RISCV_INS_C_FLW, "c.flw" },
+ { RISCV_INS_C_FLWSP, "c.flwsp" },
+ { RISCV_INS_C_FSD, "c.fsd" },
+ { RISCV_INS_C_FSDSP, "c.fsdsp" },
+ { RISCV_INS_C_FSW, "c.fsw" },
+ { RISCV_INS_C_FSWSP, "c.fswsp" },
+ { RISCV_INS_C_J, "c.j" },
+ { RISCV_INS_C_JAL, "c.jal" },
+ { RISCV_INS_C_JALR, "c.jalr" },
+ { RISCV_INS_C_JR, "c.jr" },
+ { RISCV_INS_C_LD, "c.ld" },
+ { RISCV_INS_C_LDSP, "c.ldsp" },
+ { RISCV_INS_C_LI, "c.li" },
+ { RISCV_INS_C_LUI, "c.lui" },
+ { RISCV_INS_C_LW, "c.lw" },
+ { RISCV_INS_C_LWSP, "c.lwsp" },
+ { RISCV_INS_C_MV, "c.mv" },
+ { RISCV_INS_C_NOP, "c.nop" },
+ { RISCV_INS_C_OR, "c.or" },
+ { RISCV_INS_C_SD, "c.sd" },
+ { RISCV_INS_C_SDSP, "c.sdsp" },
+ { RISCV_INS_C_SLLI, "c.slli" },
+ { RISCV_INS_C_SRAI, "c.srai" },
+ { RISCV_INS_C_SRLI, "c.srli" },
+ { RISCV_INS_C_SUB, "c.sub" },
+ { RISCV_INS_C_SUBW, "c.subw" },
+ { RISCV_INS_C_SW, "c.sw" },
+ { RISCV_INS_C_SWSP, "c.swsp" },
+ { RISCV_INS_C_UNIMP, "c.unimp" },
+ { RISCV_INS_C_XOR, "c.xor" },
+ { RISCV_INS_DIV, "div" },
+ { RISCV_INS_DIVU, "divu" },
+ { RISCV_INS_DIVUW, "divuw" },
+ { RISCV_INS_DIVW, "divw" },
+ { RISCV_INS_EBREAK, "ebreak" },
+ { RISCV_INS_ECALL, "ecall" },
+ { RISCV_INS_FADD_D, "fadd.d" },
+ { RISCV_INS_FADD_S, "fadd.s" },
+ { RISCV_INS_FCLASS_D, "fclass.d" },
+ { RISCV_INS_FCLASS_S, "fclass.s" },
+ { RISCV_INS_FCVT_D_L, "fcvt.d.l" },
+ { RISCV_INS_FCVT_D_LU, "fcvt.d.lu" },
+ { RISCV_INS_FCVT_D_S, "fcvt.d.s" },
+ { RISCV_INS_FCVT_D_W, "fcvt.d.w" },
+ { RISCV_INS_FCVT_D_WU, "fcvt.d.wu" },
+ { RISCV_INS_FCVT_LU_D, "fcvt.lu.d" },
+ { RISCV_INS_FCVT_LU_S, "fcvt.lu.s" },
+ { RISCV_INS_FCVT_L_D, "fcvt.l.d" },
+ { RISCV_INS_FCVT_L_S, "fcvt.l.s" },
+ { RISCV_INS_FCVT_S_D, "fcvt.s.d" },
+ { RISCV_INS_FCVT_S_L, "fcvt.s.l" },
+ { RISCV_INS_FCVT_S_LU, "fcvt.s.lu" },
+ { RISCV_INS_FCVT_S_W, "fcvt.s.w" },
+ { RISCV_INS_FCVT_S_WU, "fcvt.s.wu" },
+ { RISCV_INS_FCVT_WU_D, "fcvt.wu.d" },
+ { RISCV_INS_FCVT_WU_S, "fcvt.wu.s" },
+ { RISCV_INS_FCVT_W_D, "fcvt.w.d" },
+ { RISCV_INS_FCVT_W_S, "fcvt.w.s" },
+ { RISCV_INS_FDIV_D, "fdiv.d" },
+ { RISCV_INS_FDIV_S, "fdiv.s" },
+ { RISCV_INS_FENCE, "fence" },
+ { RISCV_INS_FENCE_I, "fence.i" },
+ { RISCV_INS_FENCE_TSO, "fence.tso" },
+ { RISCV_INS_FEQ_D, "feq.d" },
+ { RISCV_INS_FEQ_S, "feq.s" },
+ { RISCV_INS_FLD, "fld" },
+ { RISCV_INS_FLE_D, "fle.d" },
+ { RISCV_INS_FLE_S, "fle.s" },
+ { RISCV_INS_FLT_D, "flt.d" },
+ { RISCV_INS_FLT_S, "flt.s" },
+ { RISCV_INS_FLW, "flw" },
+ { RISCV_INS_FMADD_D, "fmadd.d" },
+ { RISCV_INS_FMADD_S, "fmadd.s" },
+ { RISCV_INS_FMAX_D, "fmax.d" },
+ { RISCV_INS_FMAX_S, "fmax.s" },
+ { RISCV_INS_FMIN_D, "fmin.d" },
+ { RISCV_INS_FMIN_S, "fmin.s" },
+ { RISCV_INS_FMSUB_D, "fmsub.d" },
+ { RISCV_INS_FMSUB_S, "fmsub.s" },
+ { RISCV_INS_FMUL_D, "fmul.d" },
+ { RISCV_INS_FMUL_S, "fmul.s" },
+ { RISCV_INS_FMV_D_X, "fmv.d.x" },
+ { RISCV_INS_FMV_W_X, "fmv.w.x" },
+ { RISCV_INS_FMV_X_D, "fmv.x.d" },
+ { RISCV_INS_FMV_X_W, "fmv.x.w" },
+ { RISCV_INS_FNMADD_D, "fnmadd.d" },
+ { RISCV_INS_FNMADD_S, "fnmadd.s" },
+ { RISCV_INS_FNMSUB_D, "fnmsub.d" },
+ { RISCV_INS_FNMSUB_S, "fnmsub.s" },
+ { RISCV_INS_FSD, "fsd" },
+ { RISCV_INS_FSGNJN_D, "fsgnjn.d" },
+ { RISCV_INS_FSGNJN_S, "fsgnjn.s" },
+ { RISCV_INS_FSGNJX_D, "fsgnjx.d" },
+ { RISCV_INS_FSGNJX_S, "fsgnjx.s" },
+ { RISCV_INS_FSGNJ_D, "fsgnj.d" },
+ { RISCV_INS_FSGNJ_S, "fsgnj.s" },
+ { RISCV_INS_FSQRT_D, "fsqrt.d" },
+ { RISCV_INS_FSQRT_S, "fsqrt.s" },
+ { RISCV_INS_FSUB_D, "fsub.d" },
+ { RISCV_INS_FSUB_S, "fsub.s" },
+ { RISCV_INS_FSW, "fsw" },
+ { RISCV_INS_JAL, "jal" },
+ { RISCV_INS_JALR, "jalr" },
+ { RISCV_INS_LB, "lb" },
+ { RISCV_INS_LBU, "lbu" },
+ { RISCV_INS_LD, "ld" },
+ { RISCV_INS_LH, "lh" },
+ { RISCV_INS_LHU, "lhu" },
+ { RISCV_INS_LR_D, "lr.d" },
+ { RISCV_INS_LR_D_AQ, "lr.d.aq" },
+ { RISCV_INS_LR_D_AQ_RL, "lr.d.aqrl" },
+ { RISCV_INS_LR_D_RL, "lr.d.rl" },
+ { RISCV_INS_LR_W, "lr.w" },
+ { RISCV_INS_LR_W_AQ, "lr.w.aq" },
+ { RISCV_INS_LR_W_AQ_RL, "lr.w.aqrl" },
+ { RISCV_INS_LR_W_RL, "lr.w.rl" },
+ { RISCV_INS_LUI, "lui" },
+ { RISCV_INS_LW, "lw" },
+ { RISCV_INS_LWU, "lwu" },
+ { RISCV_INS_MRET, "mret" },
+ { RISCV_INS_MUL, "mul" },
+ { RISCV_INS_MULH, "mulh" },
+ { RISCV_INS_MULHSU, "mulhsu" },
+ { RISCV_INS_MULHU, "mulhu" },
+ { RISCV_INS_MULW, "mulw" },
+ { RISCV_INS_OR, "or" },
+ { RISCV_INS_ORI, "ori" },
+ { RISCV_INS_REM, "rem" },
+ { RISCV_INS_REMU, "remu" },
+ { RISCV_INS_REMUW, "remuw" },
+ { RISCV_INS_REMW, "remw" },
+ { RISCV_INS_SB, "sb" },
+ { RISCV_INS_SC_D, "sc.d" },
+ { RISCV_INS_SC_D_AQ, "sc.d.aq" },
+ { RISCV_INS_SC_D_AQ_RL, "sc.d.aqrl" },
+ { RISCV_INS_SC_D_RL, "sc.d.rl" },
+ { RISCV_INS_SC_W, "sc.w" },
+ { RISCV_INS_SC_W_AQ, "sc.w.aq" },
+ { RISCV_INS_SC_W_AQ_RL, "sc.w.aqrl" },
+ { RISCV_INS_SC_W_RL, "sc.w.rl" },
+ { RISCV_INS_SD, "sd" },
+ { RISCV_INS_SFENCE_VMA, "sfence.vma" },
+ { RISCV_INS_SH, "sh" },
+ { RISCV_INS_SLL, "sll" },
+ { RISCV_INS_SLLI, "slli" },
+ { RISCV_INS_SLLIW, "slliw" },
+ { RISCV_INS_SLLW, "sllw" },
+ { RISCV_INS_SLT, "slt" },
+ { RISCV_INS_SLTI, "slti" },
+ { RISCV_INS_SLTIU, "sltiu" },
+ { RISCV_INS_SLTU, "sltu" },
+ { RISCV_INS_SRA, "sra" },
+ { RISCV_INS_SRAI, "srai" },
+ { RISCV_INS_SRAIW, "sraiw" },
+ { RISCV_INS_SRAW, "sraw" },
+ { RISCV_INS_SRET, "sret" },
+ { RISCV_INS_SRL, "srl" },
+ { RISCV_INS_SRLI, "srli" },
+ { RISCV_INS_SRLIW, "srliw" },
+ { RISCV_INS_SRLW, "srlw" },
+ { RISCV_INS_SUB, "sub" },
+ { RISCV_INS_SUBW, "subw" },
+ { RISCV_INS_SW, "sw" },
+ { RISCV_INS_UNIMP, "unimp" },
+ { RISCV_INS_URET, "uret" },
+ { RISCV_INS_WFI, "wfi" },
+ { RISCV_INS_XOR, "xor" },
+ { RISCV_INS_XORI, "xori" },
diff --git a/capstone/arch/RISCV/RISCVGenInstrInfo.inc b/capstone/arch/RISCV/RISCVGenInstrInfo.inc
new file mode 100644
index 000000000..069892e17
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenInstrInfo.inc
@@ -0,0 +1,470 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Target Instruction Enum Values and Descriptors *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+/* Capstone Disassembly Engine */
+/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
+
+
+#ifdef GET_INSTRINFO_ENUM
+#undef GET_INSTRINFO_ENUM
+
+enum {
+ RISCV_PHI = 0,
+ RISCV_INLINEASM = 1,
+ RISCV_INLINEASM_BR = 2,
+ RISCV_CFI_INSTRUCTION = 3,
+ RISCV_EH_LABEL = 4,
+ RISCV_GC_LABEL = 5,
+ RISCV_ANNOTATION_LABEL = 6,
+ RISCV_KILL = 7,
+ RISCV_EXTRACT_SUBREG = 8,
+ RISCV_INSERT_SUBREG = 9,
+ RISCV_IMPLICIT_DEF = 10,
+ RISCV_SUBREG_TO_REG = 11,
+ RISCV_COPY_TO_REGCLASS = 12,
+ RISCV_DBG_VALUE = 13,
+ RISCV_DBG_LABEL = 14,
+ RISCV_REG_SEQUENCE = 15,
+ RISCV_COPY = 16,
+ RISCV_BUNDLE = 17,
+ RISCV_LIFETIME_START = 18,
+ RISCV_LIFETIME_END = 19,
+ RISCV_STACKMAP = 20,
+ RISCV_FENTRY_CALL = 21,
+ RISCV_PATCHPOINT = 22,
+ RISCV_LOAD_STACK_GUARD = 23,
+ RISCV_STATEPOINT = 24,
+ RISCV_LOCAL_ESCAPE = 25,
+ RISCV_FAULTING_OP = 26,
+ RISCV_PATCHABLE_OP = 27,
+ RISCV_PATCHABLE_FUNCTION_ENTER = 28,
+ RISCV_PATCHABLE_RET = 29,
+ RISCV_PATCHABLE_FUNCTION_EXIT = 30,
+ RISCV_PATCHABLE_TAIL_CALL = 31,
+ RISCV_PATCHABLE_EVENT_CALL = 32,
+ RISCV_PATCHABLE_TYPED_EVENT_CALL = 33,
+ RISCV_ICALL_BRANCH_FUNNEL = 34,
+ RISCV_G_ADD = 35,
+ RISCV_G_SUB = 36,
+ RISCV_G_MUL = 37,
+ RISCV_G_SDIV = 38,
+ RISCV_G_UDIV = 39,
+ RISCV_G_SREM = 40,
+ RISCV_G_UREM = 41,
+ RISCV_G_AND = 42,
+ RISCV_G_OR = 43,
+ RISCV_G_XOR = 44,
+ RISCV_G_IMPLICIT_DEF = 45,
+ RISCV_G_PHI = 46,
+ RISCV_G_FRAME_INDEX = 47,
+ RISCV_G_GLOBAL_VALUE = 48,
+ RISCV_G_EXTRACT = 49,
+ RISCV_G_UNMERGE_VALUES = 50,
+ RISCV_G_INSERT = 51,
+ RISCV_G_MERGE_VALUES = 52,
+ RISCV_G_BUILD_VECTOR = 53,
+ RISCV_G_BUILD_VECTOR_TRUNC = 54,
+ RISCV_G_CONCAT_VECTORS = 55,
+ RISCV_G_PTRTOINT = 56,
+ RISCV_G_INTTOPTR = 57,
+ RISCV_G_BITCAST = 58,
+ RISCV_G_INTRINSIC_TRUNC = 59,
+ RISCV_G_INTRINSIC_ROUND = 60,
+ RISCV_G_LOAD = 61,
+ RISCV_G_SEXTLOAD = 62,
+ RISCV_G_ZEXTLOAD = 63,
+ RISCV_G_STORE = 64,
+ RISCV_G_ATOMIC_CMPXCHG_WITH_SUCCESS = 65,
+ RISCV_G_ATOMIC_CMPXCHG = 66,
+ RISCV_G_ATOMICRMW_XCHG = 67,
+ RISCV_G_ATOMICRMW_ADD = 68,
+ RISCV_G_ATOMICRMW_SUB = 69,
+ RISCV_G_ATOMICRMW_AND = 70,
+ RISCV_G_ATOMICRMW_NAND = 71,
+ RISCV_G_ATOMICRMW_OR = 72,
+ RISCV_G_ATOMICRMW_XOR = 73,
+ RISCV_G_ATOMICRMW_MAX = 74,
+ RISCV_G_ATOMICRMW_MIN = 75,
+ RISCV_G_ATOMICRMW_UMAX = 76,
+ RISCV_G_ATOMICRMW_UMIN = 77,
+ RISCV_G_BRCOND = 78,
+ RISCV_G_BRINDIRECT = 79,
+ RISCV_G_INTRINSIC = 80,
+ RISCV_G_INTRINSIC_W_SIDE_EFFECTS = 81,
+ RISCV_G_ANYEXT = 82,
+ RISCV_G_TRUNC = 83,
+ RISCV_G_CONSTANT = 84,
+ RISCV_G_FCONSTANT = 85,
+ RISCV_G_VASTART = 86,
+ RISCV_G_VAARG = 87,
+ RISCV_G_SEXT = 88,
+ RISCV_G_ZEXT = 89,
+ RISCV_G_SHL = 90,
+ RISCV_G_LSHR = 91,
+ RISCV_G_ASHR = 92,
+ RISCV_G_ICMP = 93,
+ RISCV_G_FCMP = 94,
+ RISCV_G_SELECT = 95,
+ RISCV_G_UADDO = 96,
+ RISCV_G_UADDE = 97,
+ RISCV_G_USUBO = 98,
+ RISCV_G_USUBE = 99,
+ RISCV_G_SADDO = 100,
+ RISCV_G_SADDE = 101,
+ RISCV_G_SSUBO = 102,
+ RISCV_G_SSUBE = 103,
+ RISCV_G_UMULO = 104,
+ RISCV_G_SMULO = 105,
+ RISCV_G_UMULH = 106,
+ RISCV_G_SMULH = 107,
+ RISCV_G_FADD = 108,
+ RISCV_G_FSUB = 109,
+ RISCV_G_FMUL = 110,
+ RISCV_G_FMA = 111,
+ RISCV_G_FDIV = 112,
+ RISCV_G_FREM = 113,
+ RISCV_G_FPOW = 114,
+ RISCV_G_FEXP = 115,
+ RISCV_G_FEXP2 = 116,
+ RISCV_G_FLOG = 117,
+ RISCV_G_FLOG2 = 118,
+ RISCV_G_FLOG10 = 119,
+ RISCV_G_FNEG = 120,
+ RISCV_G_FPEXT = 121,
+ RISCV_G_FPTRUNC = 122,
+ RISCV_G_FPTOSI = 123,
+ RISCV_G_FPTOUI = 124,
+ RISCV_G_SITOFP = 125,
+ RISCV_G_UITOFP = 126,
+ RISCV_G_FABS = 127,
+ RISCV_G_FCANONICALIZE = 128,
+ RISCV_G_GEP = 129,
+ RISCV_G_PTR_MASK = 130,
+ RISCV_G_BR = 131,
+ RISCV_G_INSERT_VECTOR_ELT = 132,
+ RISCV_G_EXTRACT_VECTOR_ELT = 133,
+ RISCV_G_SHUFFLE_VECTOR = 134,
+ RISCV_G_CTTZ = 135,
+ RISCV_G_CTTZ_ZERO_UNDEF = 136,
+ RISCV_G_CTLZ = 137,
+ RISCV_G_CTLZ_ZERO_UNDEF = 138,
+ RISCV_G_CTPOP = 139,
+ RISCV_G_BSWAP = 140,
+ RISCV_G_FCEIL = 141,
+ RISCV_G_FCOS = 142,
+ RISCV_G_FSIN = 143,
+ RISCV_G_FSQRT = 144,
+ RISCV_G_FFLOOR = 145,
+ RISCV_G_ADDRSPACE_CAST = 146,
+ RISCV_G_BLOCK_ADDR = 147,
+ RISCV_ADJCALLSTACKDOWN = 148,
+ RISCV_ADJCALLSTACKUP = 149,
+ RISCV_BuildPairF64Pseudo = 150,
+ RISCV_PseudoAtomicLoadNand32 = 151,
+ RISCV_PseudoAtomicLoadNand64 = 152,
+ RISCV_PseudoBR = 153,
+ RISCV_PseudoBRIND = 154,
+ RISCV_PseudoCALL = 155,
+ RISCV_PseudoCALLIndirect = 156,
+ RISCV_PseudoCmpXchg32 = 157,
+ RISCV_PseudoCmpXchg64 = 158,
+ RISCV_PseudoLA = 159,
+ RISCV_PseudoLI = 160,
+ RISCV_PseudoLLA = 161,
+ RISCV_PseudoMaskedAtomicLoadAdd32 = 162,
+ RISCV_PseudoMaskedAtomicLoadMax32 = 163,
+ RISCV_PseudoMaskedAtomicLoadMin32 = 164,
+ RISCV_PseudoMaskedAtomicLoadNand32 = 165,
+ RISCV_PseudoMaskedAtomicLoadSub32 = 166,
+ RISCV_PseudoMaskedAtomicLoadUMax32 = 167,
+ RISCV_PseudoMaskedAtomicLoadUMin32 = 168,
+ RISCV_PseudoMaskedAtomicSwap32 = 169,
+ RISCV_PseudoMaskedCmpXchg32 = 170,
+ RISCV_PseudoRET = 171,
+ RISCV_PseudoTAIL = 172,
+ RISCV_PseudoTAILIndirect = 173,
+ RISCV_Select_FPR32_Using_CC_GPR = 174,
+ RISCV_Select_FPR64_Using_CC_GPR = 175,
+ RISCV_Select_GPR_Using_CC_GPR = 176,
+ RISCV_SplitF64Pseudo = 177,
+ RISCV_ADD = 178,
+ RISCV_ADDI = 179,
+ RISCV_ADDIW = 180,
+ RISCV_ADDW = 181,
+ RISCV_AMOADD_D = 182,
+ RISCV_AMOADD_D_AQ = 183,
+ RISCV_AMOADD_D_AQ_RL = 184,
+ RISCV_AMOADD_D_RL = 185,
+ RISCV_AMOADD_W = 186,
+ RISCV_AMOADD_W_AQ = 187,
+ RISCV_AMOADD_W_AQ_RL = 188,
+ RISCV_AMOADD_W_RL = 189,
+ RISCV_AMOAND_D = 190,
+ RISCV_AMOAND_D_AQ = 191,
+ RISCV_AMOAND_D_AQ_RL = 192,
+ RISCV_AMOAND_D_RL = 193,
+ RISCV_AMOAND_W = 194,
+ RISCV_AMOAND_W_AQ = 195,
+ RISCV_AMOAND_W_AQ_RL = 196,
+ RISCV_AMOAND_W_RL = 197,
+ RISCV_AMOMAXU_D = 198,
+ RISCV_AMOMAXU_D_AQ = 199,
+ RISCV_AMOMAXU_D_AQ_RL = 200,
+ RISCV_AMOMAXU_D_RL = 201,
+ RISCV_AMOMAXU_W = 202,
+ RISCV_AMOMAXU_W_AQ = 203,
+ RISCV_AMOMAXU_W_AQ_RL = 204,
+ RISCV_AMOMAXU_W_RL = 205,
+ RISCV_AMOMAX_D = 206,
+ RISCV_AMOMAX_D_AQ = 207,
+ RISCV_AMOMAX_D_AQ_RL = 208,
+ RISCV_AMOMAX_D_RL = 209,
+ RISCV_AMOMAX_W = 210,
+ RISCV_AMOMAX_W_AQ = 211,
+ RISCV_AMOMAX_W_AQ_RL = 212,
+ RISCV_AMOMAX_W_RL = 213,
+ RISCV_AMOMINU_D = 214,
+ RISCV_AMOMINU_D_AQ = 215,
+ RISCV_AMOMINU_D_AQ_RL = 216,
+ RISCV_AMOMINU_D_RL = 217,
+ RISCV_AMOMINU_W = 218,
+ RISCV_AMOMINU_W_AQ = 219,
+ RISCV_AMOMINU_W_AQ_RL = 220,
+ RISCV_AMOMINU_W_RL = 221,
+ RISCV_AMOMIN_D = 222,
+ RISCV_AMOMIN_D_AQ = 223,
+ RISCV_AMOMIN_D_AQ_RL = 224,
+ RISCV_AMOMIN_D_RL = 225,
+ RISCV_AMOMIN_W = 226,
+ RISCV_AMOMIN_W_AQ = 227,
+ RISCV_AMOMIN_W_AQ_RL = 228,
+ RISCV_AMOMIN_W_RL = 229,
+ RISCV_AMOOR_D = 230,
+ RISCV_AMOOR_D_AQ = 231,
+ RISCV_AMOOR_D_AQ_RL = 232,
+ RISCV_AMOOR_D_RL = 233,
+ RISCV_AMOOR_W = 234,
+ RISCV_AMOOR_W_AQ = 235,
+ RISCV_AMOOR_W_AQ_RL = 236,
+ RISCV_AMOOR_W_RL = 237,
+ RISCV_AMOSWAP_D = 238,
+ RISCV_AMOSWAP_D_AQ = 239,
+ RISCV_AMOSWAP_D_AQ_RL = 240,
+ RISCV_AMOSWAP_D_RL = 241,
+ RISCV_AMOSWAP_W = 242,
+ RISCV_AMOSWAP_W_AQ = 243,
+ RISCV_AMOSWAP_W_AQ_RL = 244,
+ RISCV_AMOSWAP_W_RL = 245,
+ RISCV_AMOXOR_D = 246,
+ RISCV_AMOXOR_D_AQ = 247,
+ RISCV_AMOXOR_D_AQ_RL = 248,
+ RISCV_AMOXOR_D_RL = 249,
+ RISCV_AMOXOR_W = 250,
+ RISCV_AMOXOR_W_AQ = 251,
+ RISCV_AMOXOR_W_AQ_RL = 252,
+ RISCV_AMOXOR_W_RL = 253,
+ RISCV_AND = 254,
+ RISCV_ANDI = 255,
+ RISCV_AUIPC = 256,
+ RISCV_BEQ = 257,
+ RISCV_BGE = 258,
+ RISCV_BGEU = 259,
+ RISCV_BLT = 260,
+ RISCV_BLTU = 261,
+ RISCV_BNE = 262,
+ RISCV_CSRRC = 263,
+ RISCV_CSRRCI = 264,
+ RISCV_CSRRS = 265,
+ RISCV_CSRRSI = 266,
+ RISCV_CSRRW = 267,
+ RISCV_CSRRWI = 268,
+ RISCV_C_ADD = 269,
+ RISCV_C_ADDI = 270,
+ RISCV_C_ADDI16SP = 271,
+ RISCV_C_ADDI4SPN = 272,
+ RISCV_C_ADDIW = 273,
+ RISCV_C_ADDW = 274,
+ RISCV_C_AND = 275,
+ RISCV_C_ANDI = 276,
+ RISCV_C_BEQZ = 277,
+ RISCV_C_BNEZ = 278,
+ RISCV_C_EBREAK = 279,
+ RISCV_C_FLD = 280,
+ RISCV_C_FLDSP = 281,
+ RISCV_C_FLW = 282,
+ RISCV_C_FLWSP = 283,
+ RISCV_C_FSD = 284,
+ RISCV_C_FSDSP = 285,
+ RISCV_C_FSW = 286,
+ RISCV_C_FSWSP = 287,
+ RISCV_C_J = 288,
+ RISCV_C_JAL = 289,
+ RISCV_C_JALR = 290,
+ RISCV_C_JR = 291,
+ RISCV_C_LD = 292,
+ RISCV_C_LDSP = 293,
+ RISCV_C_LI = 294,
+ RISCV_C_LUI = 295,
+ RISCV_C_LW = 296,
+ RISCV_C_LWSP = 297,
+ RISCV_C_MV = 298,
+ RISCV_C_NOP = 299,
+ RISCV_C_OR = 300,
+ RISCV_C_SD = 301,
+ RISCV_C_SDSP = 302,
+ RISCV_C_SLLI = 303,
+ RISCV_C_SRAI = 304,
+ RISCV_C_SRLI = 305,
+ RISCV_C_SUB = 306,
+ RISCV_C_SUBW = 307,
+ RISCV_C_SW = 308,
+ RISCV_C_SWSP = 309,
+ RISCV_C_UNIMP = 310,
+ RISCV_C_XOR = 311,
+ RISCV_DIV = 312,
+ RISCV_DIVU = 313,
+ RISCV_DIVUW = 314,
+ RISCV_DIVW = 315,
+ RISCV_EBREAK = 316,
+ RISCV_ECALL = 317,
+ RISCV_FADD_D = 318,
+ RISCV_FADD_S = 319,
+ RISCV_FCLASS_D = 320,
+ RISCV_FCLASS_S = 321,
+ RISCV_FCVT_D_L = 322,
+ RISCV_FCVT_D_LU = 323,
+ RISCV_FCVT_D_S = 324,
+ RISCV_FCVT_D_W = 325,
+ RISCV_FCVT_D_WU = 326,
+ RISCV_FCVT_LU_D = 327,
+ RISCV_FCVT_LU_S = 328,
+ RISCV_FCVT_L_D = 329,
+ RISCV_FCVT_L_S = 330,
+ RISCV_FCVT_S_D = 331,
+ RISCV_FCVT_S_L = 332,
+ RISCV_FCVT_S_LU = 333,
+ RISCV_FCVT_S_W = 334,
+ RISCV_FCVT_S_WU = 335,
+ RISCV_FCVT_WU_D = 336,
+ RISCV_FCVT_WU_S = 337,
+ RISCV_FCVT_W_D = 338,
+ RISCV_FCVT_W_S = 339,
+ RISCV_FDIV_D = 340,
+ RISCV_FDIV_S = 341,
+ RISCV_FENCE = 342,
+ RISCV_FENCE_I = 343,
+ RISCV_FENCE_TSO = 344,
+ RISCV_FEQ_D = 345,
+ RISCV_FEQ_S = 346,
+ RISCV_FLD = 347,
+ RISCV_FLE_D = 348,
+ RISCV_FLE_S = 349,
+ RISCV_FLT_D = 350,
+ RISCV_FLT_S = 351,
+ RISCV_FLW = 352,
+ RISCV_FMADD_D = 353,
+ RISCV_FMADD_S = 354,
+ RISCV_FMAX_D = 355,
+ RISCV_FMAX_S = 356,
+ RISCV_FMIN_D = 357,
+ RISCV_FMIN_S = 358,
+ RISCV_FMSUB_D = 359,
+ RISCV_FMSUB_S = 360,
+ RISCV_FMUL_D = 361,
+ RISCV_FMUL_S = 362,
+ RISCV_FMV_D_X = 363,
+ RISCV_FMV_W_X = 364,
+ RISCV_FMV_X_D = 365,
+ RISCV_FMV_X_W = 366,
+ RISCV_FNMADD_D = 367,
+ RISCV_FNMADD_S = 368,
+ RISCV_FNMSUB_D = 369,
+ RISCV_FNMSUB_S = 370,
+ RISCV_FSD = 371,
+ RISCV_FSGNJN_D = 372,
+ RISCV_FSGNJN_S = 373,
+ RISCV_FSGNJX_D = 374,
+ RISCV_FSGNJX_S = 375,
+ RISCV_FSGNJ_D = 376,
+ RISCV_FSGNJ_S = 377,
+ RISCV_FSQRT_D = 378,
+ RISCV_FSQRT_S = 379,
+ RISCV_FSUB_D = 380,
+ RISCV_FSUB_S = 381,
+ RISCV_FSW = 382,
+ RISCV_JAL = 383,
+ RISCV_JALR = 384,
+ RISCV_LB = 385,
+ RISCV_LBU = 386,
+ RISCV_LD = 387,
+ RISCV_LH = 388,
+ RISCV_LHU = 389,
+ RISCV_LR_D = 390,
+ RISCV_LR_D_AQ = 391,
+ RISCV_LR_D_AQ_RL = 392,
+ RISCV_LR_D_RL = 393,
+ RISCV_LR_W = 394,
+ RISCV_LR_W_AQ = 395,
+ RISCV_LR_W_AQ_RL = 396,
+ RISCV_LR_W_RL = 397,
+ RISCV_LUI = 398,
+ RISCV_LW = 399,
+ RISCV_LWU = 400,
+ RISCV_MRET = 401,
+ RISCV_MUL = 402,
+ RISCV_MULH = 403,
+ RISCV_MULHSU = 404,
+ RISCV_MULHU = 405,
+ RISCV_MULW = 406,
+ RISCV_OR = 407,
+ RISCV_ORI = 408,
+ RISCV_REM = 409,
+ RISCV_REMU = 410,
+ RISCV_REMUW = 411,
+ RISCV_REMW = 412,
+ RISCV_SB = 413,
+ RISCV_SC_D = 414,
+ RISCV_SC_D_AQ = 415,
+ RISCV_SC_D_AQ_RL = 416,
+ RISCV_SC_D_RL = 417,
+ RISCV_SC_W = 418,
+ RISCV_SC_W_AQ = 419,
+ RISCV_SC_W_AQ_RL = 420,
+ RISCV_SC_W_RL = 421,
+ RISCV_SD = 422,
+ RISCV_SFENCE_VMA = 423,
+ RISCV_SH = 424,
+ RISCV_SLL = 425,
+ RISCV_SLLI = 426,
+ RISCV_SLLIW = 427,
+ RISCV_SLLW = 428,
+ RISCV_SLT = 429,
+ RISCV_SLTI = 430,
+ RISCV_SLTIU = 431,
+ RISCV_SLTU = 432,
+ RISCV_SRA = 433,
+ RISCV_SRAI = 434,
+ RISCV_SRAIW = 435,
+ RISCV_SRAW = 436,
+ RISCV_SRET = 437,
+ RISCV_SRL = 438,
+ RISCV_SRLI = 439,
+ RISCV_SRLIW = 440,
+ RISCV_SRLW = 441,
+ RISCV_SUB = 442,
+ RISCV_SUBW = 443,
+ RISCV_SW = 444,
+ RISCV_UNIMP = 445,
+ RISCV_URET = 446,
+ RISCV_WFI = 447,
+ RISCV_XOR = 448,
+ RISCV_XORI = 449,
+ RISCV_INSTRUCTION_LIST_END = 450
+ };
+
+#endif // GET_INSTRINFO_ENUM
diff --git a/capstone/arch/RISCV/RISCVGenRegisterInfo.inc b/capstone/arch/RISCV/RISCVGenRegisterInfo.inc
new file mode 100644
index 000000000..2b7446791
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenRegisterInfo.inc
@@ -0,0 +1,426 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Target Register Enum Values *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+/* Capstone Disassembly Engine */
+/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
+
+
+#ifdef GET_REGINFO_ENUM
+#undef GET_REGINFO_ENUM
+
+enum {
+ RISCV_NoRegister,
+ RISCV_X0 = 1,
+ RISCV_X1 = 2,
+ RISCV_X2 = 3,
+ RISCV_X3 = 4,
+ RISCV_X4 = 5,
+ RISCV_X5 = 6,
+ RISCV_X6 = 7,
+ RISCV_X7 = 8,
+ RISCV_X8 = 9,
+ RISCV_X9 = 10,
+ RISCV_X10 = 11,
+ RISCV_X11 = 12,
+ RISCV_X12 = 13,
+ RISCV_X13 = 14,
+ RISCV_X14 = 15,
+ RISCV_X15 = 16,
+ RISCV_X16 = 17,
+ RISCV_X17 = 18,
+ RISCV_X18 = 19,
+ RISCV_X19 = 20,
+ RISCV_X20 = 21,
+ RISCV_X21 = 22,
+ RISCV_X22 = 23,
+ RISCV_X23 = 24,
+ RISCV_X24 = 25,
+ RISCV_X25 = 26,
+ RISCV_X26 = 27,
+ RISCV_X27 = 28,
+ RISCV_X28 = 29,
+ RISCV_X29 = 30,
+ RISCV_X30 = 31,
+ RISCV_X31 = 32,
+ RISCV_F0_32 = 33,
+ RISCV_F0_64 = 34,
+ RISCV_F1_32 = 35,
+ RISCV_F1_64 = 36,
+ RISCV_F2_32 = 37,
+ RISCV_F2_64 = 38,
+ RISCV_F3_32 = 39,
+ RISCV_F3_64 = 40,
+ RISCV_F4_32 = 41,
+ RISCV_F4_64 = 42,
+ RISCV_F5_32 = 43,
+ RISCV_F5_64 = 44,
+ RISCV_F6_32 = 45,
+ RISCV_F6_64 = 46,
+ RISCV_F7_32 = 47,
+ RISCV_F7_64 = 48,
+ RISCV_F8_32 = 49,
+ RISCV_F8_64 = 50,
+ RISCV_F9_32 = 51,
+ RISCV_F9_64 = 52,
+ RISCV_F10_32 = 53,
+ RISCV_F10_64 = 54,
+ RISCV_F11_32 = 55,
+ RISCV_F11_64 = 56,
+ RISCV_F12_32 = 57,
+ RISCV_F12_64 = 58,
+ RISCV_F13_32 = 59,
+ RISCV_F13_64 = 60,
+ RISCV_F14_32 = 61,
+ RISCV_F14_64 = 62,
+ RISCV_F15_32 = 63,
+ RISCV_F15_64 = 64,
+ RISCV_F16_32 = 65,
+ RISCV_F16_64 = 66,
+ RISCV_F17_32 = 67,
+ RISCV_F17_64 = 68,
+ RISCV_F18_32 = 69,
+ RISCV_F18_64 = 70,
+ RISCV_F19_32 = 71,
+ RISCV_F19_64 = 72,
+ RISCV_F20_32 = 73,
+ RISCV_F20_64 = 74,
+ RISCV_F21_32 = 75,
+ RISCV_F21_64 = 76,
+ RISCV_F22_32 = 77,
+ RISCV_F22_64 = 78,
+ RISCV_F23_32 = 79,
+ RISCV_F23_64 = 80,
+ RISCV_F24_32 = 81,
+ RISCV_F24_64 = 82,
+ RISCV_F25_32 = 83,
+ RISCV_F25_64 = 84,
+ RISCV_F26_32 = 85,
+ RISCV_F26_64 = 86,
+ RISCV_F27_32 = 87,
+ RISCV_F27_64 = 88,
+ RISCV_F28_32 = 89,
+ RISCV_F28_64 = 90,
+ RISCV_F29_32 = 91,
+ RISCV_F29_64 = 92,
+ RISCV_F30_32 = 93,
+ RISCV_F30_64 = 94,
+ RISCV_F31_32 = 95,
+ RISCV_F31_64 = 96,
+ RISCV_NUM_TARGET_REGS // 97
+};
+
+// Register classes
+enum {
+ RISCV_FPR32RegClassID = 0,
+ RISCV_GPRRegClassID = 1,
+ RISCV_GPRNoX0RegClassID = 2,
+ RISCV_GPRNoX0X2RegClassID = 3,
+ RISCV_GPRTCRegClassID = 4,
+ RISCV_FPR32CRegClassID = 5,
+ RISCV_GPRCRegClassID = 6,
+ RISCV_GPRC_and_GPRTCRegClassID = 7,
+ RISCV_SPRegClassID = 8,
+ RISCV_FPR64RegClassID = 9,
+ RISCV_FPR64CRegClassID = 10,
+};
+
+// Register alternate name indices
+
+enum {
+ RISCV_ABIRegAltName, // 0
+ RISCV_NoRegAltName, // 1
+ RISCV_NUM_TARGET_REG_ALT_NAMES = 2
+};
+
+// Subregister indices
+
+enum {
+ RISCV_NoSubRegister,
+ RISCV_sub_32, // 1
+ RISCV_NUM_TARGET_SUBREGS
+};
+#endif // GET_REGINFO_ENUM
+
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* MC Register Information *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+
+#ifdef GET_REGINFO_MC_DESC
+#undef GET_REGINFO_MC_DESC
+
+static const MCPhysReg RISCVRegDiffLists[] = {
+ /* 0 */ 1, 0,
+ /* 2 */ 32, 0,
+ /* 4 */ 33, 0,
+ /* 6 */ 34, 0,
+ /* 8 */ 35, 0,
+ /* 10 */ 36, 0,
+ /* 12 */ 37, 0,
+ /* 14 */ 38, 0,
+ /* 16 */ 39, 0,
+ /* 18 */ 40, 0,
+ /* 20 */ 41, 0,
+ /* 22 */ 42, 0,
+ /* 24 */ 43, 0,
+ /* 26 */ 44, 0,
+ /* 28 */ 45, 0,
+ /* 30 */ 46, 0,
+ /* 32 */ 47, 0,
+ /* 34 */ 48, 0,
+ /* 36 */ 49, 0,
+ /* 38 */ 50, 0,
+ /* 40 */ 51, 0,
+ /* 42 */ 52, 0,
+ /* 44 */ 53, 0,
+ /* 46 */ 54, 0,
+ /* 48 */ 55, 0,
+ /* 50 */ 56, 0,
+ /* 52 */ 57, 0,
+ /* 54 */ 58, 0,
+ /* 56 */ 59, 0,
+ /* 58 */ 60, 0,
+ /* 60 */ 61, 0,
+ /* 62 */ 62, 0,
+ /* 64 */ 63, 0,
+ /* 66 */ 65535, 0,
+};
+
+static const uint16_t RISCVSubRegIdxLists[] = {
+ /* 0 */ 1, 0,
+};
+
+static const MCRegisterDesc RISCVRegDesc[] = { // Descriptors
+ { 3, 0, 0, 0, 0, 0 },
+ { 12, 1, 1, 1, 1057, 0 },
+ { 27, 1, 1, 1, 1057, 0 },
+ { 252, 1, 1, 1, 1057, 0 },
+ { 263, 1, 1, 1, 1057, 0 },
+ { 488, 1, 1, 1, 1057, 0 },
+ { 499, 1, 1, 1, 1057, 0 },
+ { 510, 1, 1, 1, 1057, 0 },
+ { 521, 1, 1, 1, 1057, 0 },
+ { 532, 1, 1, 1, 1057, 0 },
+ { 543, 1, 1, 1, 1057, 0 },
+ { 0, 1, 1, 1, 1057, 0 },
+ { 15, 1, 1, 1, 1057, 0 },
+ { 30, 1, 1, 1, 1057, 0 },
+ { 255, 1, 1, 1, 1057, 0 },
+ { 266, 1, 1, 1, 1057, 0 },
+ { 491, 1, 1, 1, 1057, 0 },
+ { 502, 1, 1, 1, 1057, 0 },
+ { 513, 1, 1, 1, 1057, 0 },
+ { 524, 1, 1, 1, 1057, 0 },
+ { 535, 1, 1, 1, 1057, 0 },
+ { 4, 1, 1, 1, 1057, 0 },
+ { 19, 1, 1, 1, 1057, 0 },
+ { 34, 1, 1, 1, 1057, 0 },
+ { 259, 1, 1, 1, 1057, 0 },
+ { 270, 1, 1, 1, 1057, 0 },
+ { 495, 1, 1, 1, 1057, 0 },
+ { 506, 1, 1, 1, 1057, 0 },
+ { 517, 1, 1, 1, 1057, 0 },
+ { 528, 1, 1, 1, 1057, 0 },
+ { 539, 1, 1, 1, 1057, 0 },
+ { 8, 1, 1, 1, 1057, 0 },
+ { 23, 1, 1, 1, 1057, 0 },
+ { 59, 1, 0, 1, 32, 0 },
+ { 295, 66, 1, 0, 32, 2 },
+ { 86, 1, 0, 1, 64, 0 },
+ { 322, 66, 1, 0, 64, 2 },
+ { 106, 1, 0, 1, 96, 0 },
+ { 342, 66, 1, 0, 96, 2 },
+ { 126, 1, 0, 1, 128, 0 },
+ { 362, 66, 1, 0, 128, 2 },
+ { 146, 1, 0, 1, 160, 0 },
+ { 382, 66, 1, 0, 160, 2 },
+ { 166, 1, 0, 1, 192, 0 },
+ { 402, 66, 1, 0, 192, 2 },
+ { 186, 1, 0, 1, 224, 0 },
+ { 422, 66, 1, 0, 224, 2 },
+ { 206, 1, 0, 1, 256, 0 },
+ { 442, 66, 1, 0, 256, 2 },
+ { 226, 1, 0, 1, 288, 0 },
+ { 462, 66, 1, 0, 288, 2 },
+ { 246, 1, 0, 1, 320, 0 },
+ { 482, 66, 1, 0, 320, 2 },
+ { 38, 1, 0, 1, 352, 0 },
+ { 274, 66, 1, 0, 352, 2 },
+ { 65, 1, 0, 1, 384, 0 },
+ { 301, 66, 1, 0, 384, 2 },
+ { 92, 1, 0, 1, 416, 0 },
+ { 328, 66, 1, 0, 416, 2 },
+ { 112, 1, 0, 1, 448, 0 },
+ { 348, 66, 1, 0, 448, 2 },
+ { 132, 1, 0, 1, 480, 0 },
+ { 368, 66, 1, 0, 480, 2 },
+ { 152, 1, 0, 1, 512, 0 },
+ { 388, 66, 1, 0, 512, 2 },
+ { 172, 1, 0, 1, 544, 0 },
+ { 408, 66, 1, 0, 544, 2 },
+ { 192, 1, 0, 1, 576, 0 },
+ { 428, 66, 1, 0, 576, 2 },
+ { 212, 1, 0, 1, 608, 0 },
+ { 448, 66, 1, 0, 608, 2 },
+ { 232, 1, 0, 1, 640, 0 },
+ { 468, 66, 1, 0, 640, 2 },
+ { 45, 1, 0, 1, 672, 0 },
+ { 281, 66, 1, 0, 672, 2 },
+ { 72, 1, 0, 1, 704, 0 },
+ { 308, 66, 1, 0, 704, 2 },
+ { 99, 1, 0, 1, 736, 0 },
+ { 335, 66, 1, 0, 736, 2 },
+ { 119, 1, 0, 1, 768, 0 },
+ { 355, 66, 1, 0, 768, 2 },
+ { 139, 1, 0, 1, 800, 0 },
+ { 375, 66, 1, 0, 800, 2 },
+ { 159, 1, 0, 1, 832, 0 },
+ { 395, 66, 1, 0, 832, 2 },
+ { 179, 1, 0, 1, 864, 0 },
+ { 415, 66, 1, 0, 864, 2 },
+ { 199, 1, 0, 1, 896, 0 },
+ { 435, 66, 1, 0, 896, 2 },
+ { 219, 1, 0, 1, 928, 0 },
+ { 455, 66, 1, 0, 928, 2 },
+ { 239, 1, 0, 1, 960, 0 },
+ { 475, 66, 1, 0, 960, 2 },
+ { 52, 1, 0, 1, 992, 0 },
+ { 288, 66, 1, 0, 992, 2 },
+ { 79, 1, 0, 1, 1024, 0 },
+ { 315, 66, 1, 0, 1024, 2 },
+};
+
+ // FPR32 Register Class...
+ static const MCPhysReg FPR32[] = {
+ RISCV_F0_32, RISCV_F1_32, RISCV_F2_32, RISCV_F3_32, RISCV_F4_32, RISCV_F5_32, RISCV_F6_32, RISCV_F7_32, RISCV_F10_32, RISCV_F11_32, RISCV_F12_32, RISCV_F13_32, RISCV_F14_32, RISCV_F15_32, RISCV_F16_32, RISCV_F17_32, RISCV_F28_32, RISCV_F29_32, RISCV_F30_32, RISCV_F31_32, RISCV_F8_32, RISCV_F9_32, RISCV_F18_32, RISCV_F19_32, RISCV_F20_32, RISCV_F21_32, RISCV_F22_32, RISCV_F23_32, RISCV_F24_32, RISCV_F25_32, RISCV_F26_32, RISCV_F27_32,
+ };
+
+ // FPR32 Bit set.
+ static const uint8_t FPR32Bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ };
+
+ // GPR Register Class...
+ static const MCPhysReg GPR[] = {
+ RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15, RISCV_X16, RISCV_X17, RISCV_X5, RISCV_X6, RISCV_X7, RISCV_X28, RISCV_X29, RISCV_X30, RISCV_X31, RISCV_X8, RISCV_X9, RISCV_X18, RISCV_X19, RISCV_X20, RISCV_X21, RISCV_X22, RISCV_X23, RISCV_X24, RISCV_X25, RISCV_X26, RISCV_X27, RISCV_X0, RISCV_X1, RISCV_X2, RISCV_X3, RISCV_X4,
+ };
+
+ // GPR Bit set.
+ static const uint8_t GPRBits[] = {
+ 0xfe, 0xff, 0xff, 0xff, 0x01,
+ };
+
+ // GPRNoX0 Register Class...
+ static const MCPhysReg GPRNoX0[] = {
+ RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15, RISCV_X16, RISCV_X17, RISCV_X5, RISCV_X6, RISCV_X7, RISCV_X28, RISCV_X29, RISCV_X30, RISCV_X31, RISCV_X8, RISCV_X9, RISCV_X18, RISCV_X19, RISCV_X20, RISCV_X21, RISCV_X22, RISCV_X23, RISCV_X24, RISCV_X25, RISCV_X26, RISCV_X27, RISCV_X1, RISCV_X2, RISCV_X3, RISCV_X4,
+ };
+
+ // GPRNoX0 Bit set.
+ static const uint8_t GPRNoX0Bits[] = {
+ 0xfc, 0xff, 0xff, 0xff, 0x01,
+ };
+
+ // GPRNoX0X2 Register Class...
+ static const MCPhysReg GPRNoX0X2[] = {
+ RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15, RISCV_X16, RISCV_X17, RISCV_X5, RISCV_X6, RISCV_X7, RISCV_X28, RISCV_X29, RISCV_X30, RISCV_X31, RISCV_X8, RISCV_X9, RISCV_X18, RISCV_X19, RISCV_X20, RISCV_X21, RISCV_X22, RISCV_X23, RISCV_X24, RISCV_X25, RISCV_X26, RISCV_X27, RISCV_X1, RISCV_X3, RISCV_X4,
+ };
+
+ // GPRNoX0X2 Bit set.
+ static const uint8_t GPRNoX0X2Bits[] = {
+ 0xf4, 0xff, 0xff, 0xff, 0x01,
+ };
+
+ // GPRTC Register Class...
+ static const MCPhysReg GPRTC[] = {
+ RISCV_X5, RISCV_X6, RISCV_X7, RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15, RISCV_X16, RISCV_X17, RISCV_X28, RISCV_X29, RISCV_X30, RISCV_X31,
+ };
+
+ // GPRTC Bit set.
+ static const uint8_t GPRTCBits[] = {
+ 0xc0, 0xf9, 0x07, 0xe0, 0x01,
+ };
+
+ // FPR32C Register Class...
+ static const MCPhysReg FPR32C[] = {
+ RISCV_F10_32, RISCV_F11_32, RISCV_F12_32, RISCV_F13_32, RISCV_F14_32, RISCV_F15_32, RISCV_F8_32, RISCV_F9_32,
+ };
+
+ // FPR32C Bit set.
+ static const uint8_t FPR32CBits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa,
+ };
+
+ // GPRC Register Class...
+ static const MCPhysReg GPRC[] = {
+ RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15, RISCV_X8, RISCV_X9,
+ };
+
+ // GPRC Bit set.
+ static const uint8_t GPRCBits[] = {
+ 0x00, 0xfe, 0x01,
+ };
+
+ // GPRC_and_GPRTC Register Class...
+ static const MCPhysReg GPRC_and_GPRTC[] = {
+ RISCV_X10, RISCV_X11, RISCV_X12, RISCV_X13, RISCV_X14, RISCV_X15,
+ };
+
+ // GPRC_and_GPRTC Bit set.
+ static const uint8_t GPRC_and_GPRTCBits[] = {
+ 0x00, 0xf8, 0x01,
+ };
+
+ // SP Register Class...
+ static const MCPhysReg SP[] = {
+ RISCV_X2,
+ };
+
+ // SP Bit set.
+ static const uint8_t SPBits[] = {
+ 0x08,
+ };
+
+ // FPR64 Register Class...
+ static const MCPhysReg FPR64[] = {
+ RISCV_F0_64, RISCV_F1_64, RISCV_F2_64, RISCV_F3_64, RISCV_F4_64, RISCV_F5_64, RISCV_F6_64, RISCV_F7_64, RISCV_F10_64, RISCV_F11_64, RISCV_F12_64, RISCV_F13_64, RISCV_F14_64, RISCV_F15_64, RISCV_F16_64, RISCV_F17_64, RISCV_F28_64, RISCV_F29_64, RISCV_F30_64, RISCV_F31_64, RISCV_F8_64, RISCV_F9_64, RISCV_F18_64, RISCV_F19_64, RISCV_F20_64, RISCV_F21_64, RISCV_F22_64, RISCV_F23_64, RISCV_F24_64, RISCV_F25_64, RISCV_F26_64, RISCV_F27_64,
+ };
+
+ // FPR64 Bit set.
+ static const uint8_t FPR64Bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01,
+ };
+
+ // FPR64C Register Class...
+ static const MCPhysReg FPR64C[] = {
+ RISCV_F10_64, RISCV_F11_64, RISCV_F12_64, RISCV_F13_64, RISCV_F14_64, RISCV_F15_64, RISCV_F8_64, RISCV_F9_64,
+ };
+
+ // FPR64C Bit set.
+ static const uint8_t FPR64CBits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x01,
+ };
+
+static const MCRegisterClass RISCVMCRegisterClasses[] = {
+ { FPR32, FPR32Bits, sizeof(FPR32Bits) },
+ { GPR, GPRBits, sizeof(GPRBits) },
+ { GPRNoX0, GPRNoX0Bits, sizeof(GPRNoX0Bits) },
+ { GPRNoX0X2, GPRNoX0X2Bits, sizeof(GPRNoX0X2Bits) },
+ { GPRTC, GPRTCBits, sizeof(GPRTCBits) },
+ { FPR32C, FPR32CBits, sizeof(FPR32CBits) },
+ { GPRC, GPRCBits, sizeof(GPRCBits) },
+ { GPRC_and_GPRTC, GPRC_and_GPRTCBits, sizeof(GPRC_and_GPRTCBits) },
+ { SP, SPBits, sizeof(SPBits) },
+ { FPR64, FPR64Bits, sizeof(FPR64Bits) },
+ { FPR64C, FPR64CBits, sizeof(FPR64CBits) },
+};
+
+#endif // GET_REGINFO_MC_DESC
diff --git a/capstone/arch/RISCV/RISCVGenSubtargetInfo.inc b/capstone/arch/RISCV/RISCVGenSubtargetInfo.inc
new file mode 100644
index 000000000..c857ce6c1
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVGenSubtargetInfo.inc
@@ -0,0 +1,33 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Subtarget Enumeration Source Fragment *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+/* Capstone Disassembly Engine, http://www.capstone-engine.org */
+/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
+
+
+#ifdef GET_SUBTARGETINFO_ENUM
+#undef GET_SUBTARGETINFO_ENUM
+
+/*
+ Make sure:
+ CS_MODE_RISCV64 = 0b11111
+ CS_MODE_RISCV32 = 0b11110
+*/
+
+enum {
+ RISCV_Feature64Bit = 1ULL << 0,
+ RISCV_FeatureStdExtA = 1ULL << 1,
+ RISCV_FeatureStdExtC = 1ULL << 2,
+ RISCV_FeatureStdExtD = 1ULL << 3,
+ RISCV_FeatureStdExtF = 1ULL << 4,
+ RISCV_FeatureStdExtM = 1ULL << 5,
+ RISCV_FeatureRelax = 1ULL << 6,
+};
+
+#endif // GET_SUBTARGETINFO_ENUM
+
diff --git a/capstone/arch/RISCV/RISCVInstPrinter.c b/capstone/arch/RISCV/RISCVInstPrinter.c
new file mode 100644
index 000000000..51d7b574b
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVInstPrinter.c
@@ -0,0 +1,204 @@
+//===-- RISCVInstPrinter.cpp - Convert RISCV MCInst to asm syntax ---------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class prints an RISCV MCInst to a .s file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifdef CAPSTONE_HAS_RISCV
+
+#include <stdio.h> // DEBUG
+#include <stdlib.h>
+#include <string.h>
+#include <capstone/platform.h>
+
+#include "RISCVInstPrinter.h"
+#include "RISCVBaseInfo.h"
+#include "../../MCInst.h"
+#include "../../SStream.h"
+#include "../../MCRegisterInfo.h"
+#include "../../utils.h"
+#include "RISCVMapping.h"
+
+//#include "RISCVDisassembler.h"
+
+#define GET_REGINFO_ENUM
+#define GET_REGINFO_MC_DESC
+#include "RISCVGenRegisterInfo.inc"
+#define GET_INSTRINFO_ENUM
+#include "RISCVGenInstrInfo.inc"
+
+// Autogenerated by tblgen.
+static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI);
+static bool printAliasInstr(MCInst *MI, SStream *OS, void *info);
+static void printOperand(MCInst *MI, unsigned OpNo, SStream *O);
+static void printFenceArg(MCInst *MI, unsigned OpNo, SStream *O);
+static void printCSRSystemRegister(const MCInst*, unsigned, SStream *);
+static void printFRMArg(MCInst *MI, unsigned OpNo, SStream *O);
+static void printCustomAliasOperand( MCInst *, unsigned, unsigned, SStream *);
+/// getRegisterName - This method is automatically generated by tblgen
+/// from the register set description. This returns the assembler name
+/// for the specified register.
+static const char *getRegisterName(unsigned RegNo, unsigned AltIdx);
+
+// Include the auto-generated portion of the assembly writer.
+#define PRINT_ALIAS_INSTR
+#include "RISCVGenAsmWriter.inc"
+
+
+static void fixDetailOfEffectiveAddr(MCInst *MI)
+{
+ unsigned reg = 0;
+ int64_t imm = 0;
+
+ CS_ASSERT(3 == MI->flat_insn->detail->riscv.op_count);
+ CS_ASSERT(RISCV_OP_REG == MI->flat_insn->detail->riscv.operands[0].type);
+
+ if (RISCV_OP_IMM == MI->flat_insn->detail->riscv.operands[1].type) {
+ CS_ASSERT(RISCV_OP_REG == MI->flat_insn->detail->riscv.operands[2].type);
+ imm = MI->flat_insn->detail->riscv.operands[1].imm;
+ reg = MI->flat_insn->detail->riscv.operands[2].reg;
+ } else if (RISCV_OP_REG == MI->flat_insn->detail->riscv.operands[1].type) {
+ CS_ASSERT(RISCV_OP_IMM == MI->flat_insn->detail->riscv.operands[2].type);
+ reg = MI->flat_insn->detail->riscv.operands[1].reg;
+ imm = MI->flat_insn->detail->riscv.operands[2].imm;
+ }
+
+ // set up effective address.
+ MI->flat_insn->detail->riscv.operands[1].type = RISCV_OP_MEM;
+ MI->flat_insn->detail->riscv.op_count--;
+ MI->flat_insn->detail->riscv.operands[1].mem.base = reg;
+ MI->flat_insn->detail->riscv.operands[1].mem.disp = imm;
+
+ return;
+}
+
+
+//void RISCVInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
+// StringRef Annot, const MCSubtargetInfo &STI)
+void RISCV_printInst(MCInst *MI, SStream *O, void *info)
+{
+ MCRegisterInfo *MRI = (MCRegisterInfo *) info;
+ //bool Res = false;
+ //MCInst *NewMI = MI;
+ // TODO: RISCV compressd instructions.
+ //MCInst UncompressedMI;
+ //if (!NoAliases)
+ //Res = uncompressInst(UncompressedMI, *MI, MRI, STI);
+ //if (Res)
+ //NewMI = const_cast<MCInst *>(&UncompressedMI);
+ if (/*NoAliases ||*/ !printAliasInstr(MI, O, info))
+ printInstruction(MI, O, MRI);
+ //printAnnotation(O, Annot);
+ // fix load/store type insttuction
+ if (MI->csh->detail &&
+ MI->flat_insn->detail->riscv.need_effective_addr)
+ fixDetailOfEffectiveAddr(MI);
+
+ return;
+}
+
+static void printRegName(SStream *OS, unsigned RegNo)
+{
+ SStream_concat0(OS, getRegisterName(RegNo, RISCV_ABIRegAltName));
+}
+
+/**
+void RISCVInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,
+ raw_ostream &O, const char *Modifier)
+*/
+static void printOperand(MCInst *MI, unsigned OpNo, SStream *O)
+{
+ unsigned reg;
+ int64_t Imm = 0;
+
+ MCOperand *MO = MCInst_getOperand(MI, OpNo);
+
+ if (MCOperand_isReg(MO)) {
+ reg = MCOperand_getReg(MO);
+ printRegName(O, reg);
+ if (MI->csh->detail) {
+ MI->flat_insn->detail->riscv.operands[MI->flat_insn->detail->riscv.op_count].type = RISCV_OP_REG;
+ MI->flat_insn->detail->riscv.operands[MI->flat_insn->detail->riscv.op_count].reg = reg;
+ MI->flat_insn->detail->riscv.op_count++;
+ }
+ } else {
+ CS_ASSERT(MCOperand_isImm(MO) && "Unknown operand kind in printOperand");
+ Imm = MCOperand_getImm(MO);
+ if (Imm >= 0) {
+ if (Imm > HEX_THRESHOLD)
+ SStream_concat(O, "0x%" PRIx64, Imm);
+ else
+ SStream_concat(O, "%" PRIu64, Imm);
+ } else {
+ if (Imm < -HEX_THRESHOLD)
+ SStream_concat(O, "-0x%" PRIx64, -Imm);
+ else
+ SStream_concat(O, "-%" PRIu64, -Imm);
+ }
+
+ if (MI->csh->detail) {
+ MI->flat_insn->detail->riscv.operands[MI->flat_insn->detail->riscv.op_count].type = RISCV_OP_IMM;
+ MI->flat_insn->detail->riscv.operands[MI->flat_insn->detail->riscv.op_count].imm = Imm;
+ MI->flat_insn->detail->riscv.op_count++;
+ }
+ }
+
+ //CS_ASSERT(MO.isExpr() && "Unknown operand kind in printOperand");
+
+ return;
+}
+
+static void printCSRSystemRegister(const MCInst *MI, unsigned OpNo,
+ //const MCSubtargetInfo &STI,
+ SStream *O)
+{
+ // TODO: Not yeat implementated.
+ return;
+ //CS_ASSERT (0 && "CSR system register hav't support.");
+#if 0
+ unsigned Imm = MI->getOperand(OpNo).getImm();
+ auto SysReg = RISCVSysReg::lookupSysRegByEncoding(Imm);
+ if (SysReg && SysReg->haveRequiredFeatures(STI.getFeatureBits()))
+ O << SysReg->Name;
+ else
+ O << Imm;
+#endif
+}
+
+static void printFenceArg(MCInst *MI, unsigned OpNo, SStream *O)
+{
+ unsigned FenceArg = MCOperand_getImm(MCInst_getOperand(MI, OpNo));
+ //CS_ASSERT (((FenceArg >> 4) == 0) && "Invalid immediate in printFenceArg");
+
+ if ((FenceArg & RISCVFenceField_I) != 0)
+ SStream_concat0(O, "i");
+ if ((FenceArg & RISCVFenceField_O) != 0)
+ SStream_concat0(O, "o");
+ if ((FenceArg & RISCVFenceField_R) != 0)
+ SStream_concat0(O, "r");
+ if ((FenceArg & RISCVFenceField_W) != 0)
+ SStream_concat0(O, "w");
+ if (FenceArg == 0)
+ SStream_concat0(O, "unknown");
+}
+
+static void printFRMArg(MCInst *MI, unsigned OpNo, SStream *O)
+{
+ enum RoundingMode FRMArg =
+ (enum RoundingMode)MCOperand_getImm(MCInst_getOperand(MI, OpNo));
+#if 0
+ auto FRMArg =
+ static_cast<RISCVFPRndMode::RoundingMode>(MI->getOperand(OpNo).getImm());
+ O << RISCVFPRndMode::roundingModeToString(FRMArg);
+#endif
+ SStream_concat0(O, roundingModeToString(FRMArg));
+}
+
+#endif // CAPSTONE_HAS_RISCV
diff --git a/capstone/arch/RISCV/RISCVInstPrinter.h b/capstone/arch/RISCV/RISCVInstPrinter.h
new file mode 100644
index 000000000..466c3f86d
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVInstPrinter.h
@@ -0,0 +1,24 @@
+//===-- RISCVInstPrinter.h - Convert RISCV MCInst to asm syntax ---*- C++ -*--//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class prints a RISCV MCInst to a .s file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CS_RISCVINSTPRINTER_H
+#define CS_RISCVINSTPRINTER_H
+
+#include "../../MCInst.h"
+#include "../../SStream.h"
+
+void RISCV_printInst(MCInst * MI, SStream * O, void *info);
+
+void RISCV_post_printer(csh ud, cs_insn * insn, char *insn_asm, MCInst * mci);
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVMapping.c b/capstone/arch/RISCV/RISCVMapping.c
new file mode 100644
index 000000000..8ef977183
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVMapping.c
@@ -0,0 +1,359 @@
+
+#ifdef CAPSTONE_HAS_RISCV
+
+#include <stdio.h> // debug
+#include <string.h>
+
+#include "../../utils.h"
+
+#include "RISCVMapping.h"
+#include "RISCVInstPrinter.h"
+
+#define GET_INSTRINFO_ENUM
+#include "RISCVGenInstrInfo.inc"
+
+#ifndef CAPSTONE_DIET
+static const name_map reg_name_maps[] = {
+ { RISCV_REG_INVALID, NULL },
+
+ { RISCV_REG_X0, "zero" },
+ { RISCV_REG_X1, "ra" },
+ { RISCV_REG_X2, "sp" },
+ { RISCV_REG_X3, "gp" },
+ { RISCV_REG_X4, "tp" },
+ { RISCV_REG_X5, "t0" },
+ { RISCV_REG_X6, "t1" },
+ { RISCV_REG_X7, "t2" },
+ { RISCV_REG_X8, "s0" },
+ { RISCV_REG_X9, "s1" },
+ { RISCV_REG_X10, "a0" },
+ { RISCV_REG_X11, "a1" },
+ { RISCV_REG_X12, "a2" },
+ { RISCV_REG_X13, "a3" },
+ { RISCV_REG_X14, "a4" },
+ { RISCV_REG_X15, "a5" },
+ { RISCV_REG_X16, "a6" },
+ { RISCV_REG_X17, "a7" },
+ { RISCV_REG_X18, "s2" },
+ { RISCV_REG_X19, "s3" },
+ { RISCV_REG_X20, "s4" },
+ { RISCV_REG_X21, "s5" },
+ { RISCV_REG_X22, "s6" },
+ { RISCV_REG_X23, "s7" },
+ { RISCV_REG_X24, "s8" },
+ { RISCV_REG_X25, "s9" },
+ { RISCV_REG_X26, "s10" },
+ { RISCV_REG_X27, "s11" },
+ { RISCV_REG_X28, "t3" },
+ { RISCV_REG_X29, "t4" },
+ { RISCV_REG_X30, "t5" },
+ { RISCV_REG_X31, "t6" },
+
+ { RISCV_REG_F0_32, "ft0" },
+ { RISCV_REG_F0_64, "ft0" },
+ { RISCV_REG_F1_32, "ft1" },
+ { RISCV_REG_F1_64, "ft1" },
+ { RISCV_REG_F2_32, "ft2" },
+ { RISCV_REG_F2_64, "ft2" },
+ { RISCV_REG_F3_32, "ft3" },
+ { RISCV_REG_F3_64, "ft3" },
+ { RISCV_REG_F4_32, "ft4" },
+ { RISCV_REG_F4_64, "ft4" },
+ { RISCV_REG_F5_32, "ft5" },
+ { RISCV_REG_F5_64, "ft5" },
+ { RISCV_REG_F6_32, "ft6" },
+ { RISCV_REG_F6_64, "ft6" },
+ { RISCV_REG_F7_32, "ft7" },
+ { RISCV_REG_F7_64, "ft7" },
+ { RISCV_REG_F8_32, "fs0" },
+ { RISCV_REG_F8_64, "fs0" },
+ { RISCV_REG_F9_32, "fs1" },
+ { RISCV_REG_F9_64, "fs1" },
+ { RISCV_REG_F10_32, "fa0" },
+ { RISCV_REG_F10_64, "fa0" },
+ { RISCV_REG_F11_32, "fa1" },
+ { RISCV_REG_F11_64, "fa1" },
+ { RISCV_REG_F12_32, "fa2" },
+ { RISCV_REG_F12_64, "fa2" },
+ { RISCV_REG_F13_32, "fa3" },
+ { RISCV_REG_F13_64, "fa3" },
+ { RISCV_REG_F14_32, "fa4" },
+ { RISCV_REG_F14_64, "fa4" },
+ { RISCV_REG_F15_32, "fa5" },
+ { RISCV_REG_F15_64, "fa5" },
+ { RISCV_REG_F16_32, "fa6" },
+ { RISCV_REG_F16_64, "fa6" },
+ { RISCV_REG_F17_32, "fa7" },
+ { RISCV_REG_F17_64, "fa7" },
+ { RISCV_REG_F18_32, "fs2" },
+ { RISCV_REG_F18_64, "fs2" },
+ { RISCV_REG_F19_32, "fs3" },
+ { RISCV_REG_F19_64, "fs3" },
+ { RISCV_REG_F20_32, "fs4" },
+ { RISCV_REG_F20_64, "fs4" },
+ { RISCV_REG_F21_32, "fs5" },
+ { RISCV_REG_F21_64, "fs5" },
+ { RISCV_REG_F22_32, "fs6" },
+ { RISCV_REG_F22_64, "fs6" },
+ { RISCV_REG_F23_32, "fs7" },
+ { RISCV_REG_F23_64, "fs7" },
+ { RISCV_REG_F24_32, "fs8" },
+ { RISCV_REG_F24_64, "fs8" },
+ { RISCV_REG_F25_32, "fs9" },
+ { RISCV_REG_F25_64, "fs9" },
+ { RISCV_REG_F26_32, "fs10" },
+ { RISCV_REG_F26_64, "fs10" },
+ { RISCV_REG_F27_32, "fs11" },
+ { RISCV_REG_F27_64, "fs11" },
+ { RISCV_REG_F28_32, "ft8" },
+ { RISCV_REG_F28_64, "ft8" },
+ { RISCV_REG_F29_32, "ft9" },
+ { RISCV_REG_F29_64, "ft9" },
+ { RISCV_REG_F30_32, "ft10" },
+ { RISCV_REG_F30_64, "ft10" },
+ { RISCV_REG_F31_32, "ft11" },
+ { RISCV_REG_F31_64, "ft11" },
+};
+#endif
+
+const char *RISCV_reg_name(csh handle, unsigned int reg)
+{
+#ifndef CAPSTONE_DIET
+ if (reg >= RISCV_REG_ENDING)
+ return NULL;
+ return reg_name_maps[reg].name;
+#else
+ return NULL;
+#endif
+}
+
+static const insn_map insns[] = {
+ // dummy item
+ {
+ 0, 0,
+#ifndef CAPSTONE_DIET
+ {0}, {0}, {0}, 0, 0
+#endif
+ },
+
+#include "RISCVMappingInsn.inc"
+};
+
+// given internal insn id, return public instruction info
+void RISCV_get_insn_id(cs_struct * h, cs_insn * insn, unsigned int id)
+{
+ unsigned int i;
+
+ i = insn_find(insns, ARR_SIZE(insns), id, &h->insn_cache);
+ if (i != 0) {
+ insn->id = insns[i].mapid;
+
+ if (h->detail) {
+#ifndef CAPSTONE_DIET
+ memcpy(insn->detail->regs_read,
+ insns[i].regs_use, sizeof(insns[i].regs_use));
+ insn->detail->regs_read_count = (uint8_t)count_positive(insns[i].regs_use);
+
+ memcpy(insn->detail->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
+ insn->detail->regs_write_count = (uint8_t)count_positive(insns[i].regs_mod);
+
+ memcpy(insn->detail->groups, insns[i].groups, sizeof(insns[i].groups));
+ insn->detail->groups_count = (uint8_t)count_positive8(insns[i].groups);
+
+ if (insns[i].branch || insns[i].indirect_branch) {
+ // this insn also belongs to JUMP group. add JUMP group
+ insn->detail->groups[insn->detail->groups_count] = RISCV_GRP_JUMP;
+ insn->detail->groups_count++;
+ }
+#endif
+ }
+ }
+}
+
+static const name_map insn_name_maps[] = {
+ {RISCV_INS_INVALID, NULL},
+
+#include "RISCVGenInsnNameMaps.inc"
+};
+
+const char *RISCV_insn_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+ if (id >= RISCV_INS_ENDING)
+ return NULL;
+
+ return insn_name_maps[id].name;
+#else
+ return NULL;
+#endif
+}
+
+#ifndef CAPSTONE_DIET
+static const name_map group_name_maps[] = {
+ { RISCV_GRP_INVALID, NULL },
+ { RISCV_GRP_JUMP, "jump" },
+
+ // architecture specific
+ { RISCV_GRP_ISRV32, "isrv32" },
+ { RISCV_GRP_ISRV64, "isrv64" },
+ { RISCV_GRP_HASSTDEXTA, "hasStdExtA" },
+ { RISCV_GRP_HASSTDEXTC, "hasStdExtC" },
+ { RISCV_GRP_HASSTDEXTD, "hasStdExtD" },
+ { RISCV_GRP_HASSTDEXTF, "hasStdExtF" },
+ { RISCV_GRP_HASSTDEXTM, "hasStdExtM" },
+
+ /*
+ { RISCV_GRP_ISRVA, "isrva" },
+ { RISCV_GRP_ISRVC, "isrvc" },
+ { RISCV_GRP_ISRVD, "isrvd" },
+ { RISCV_GRP_ISRVCD, "isrvcd" },
+ { RISCV_GRP_ISRVF, "isrvf" },
+ { RISCV_GRP_ISRV32C, "isrv32c" },
+ { RISCV_GRP_ISRV32CF, "isrv32cf" },
+ { RISCV_GRP_ISRVM, "isrvm" },
+ { RISCV_GRP_ISRV64A, "isrv64a" },
+ { RISCV_GRP_ISRV64C, "isrv64c" },
+ { RISCV_GRP_ISRV64D, "isrv64d" },
+ { RISCV_GRP_ISRV64F, "isrv64f" },
+ { RISCV_GRP_ISRV64M, "isrv64m" }
+ */
+ { RISCV_GRP_ENDING, NULL }
+};
+#endif
+
+const char *RISCV_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+ // verify group id
+ if (id >= RISCV_GRP_ENDING ||
+ (id > RISCV_GRP_JUMP && id < RISCV_GRP_ISRV32))
+ return NULL;
+ return id2name(group_name_maps, ARR_SIZE(group_name_maps), id);
+#else
+ return NULL;
+#endif
+}
+
+// map instruction name to public instruction ID
+riscv_reg RISCV_map_insn(const char *name)
+{
+ // handle special alias first
+ unsigned int i;
+
+ // NOTE: skip first NULL name in insn_name_maps
+ i = name2id(&insn_name_maps[1], ARR_SIZE(insn_name_maps) - 1, name);
+
+ return (i != -1) ? i : RISCV_REG_INVALID;
+}
+
+// map internal raw register to 'public' register
+riscv_reg RISCV_map_register(unsigned int r)
+{
+ static const unsigned int map[] = { 0,
+ RISCV_REG_X0,
+ RISCV_REG_X1,
+ RISCV_REG_X2,
+ RISCV_REG_X3,
+ RISCV_REG_X4,
+ RISCV_REG_X5,
+ RISCV_REG_X6,
+ RISCV_REG_X7,
+ RISCV_REG_X8,
+ RISCV_REG_X9,
+ RISCV_REG_X10,
+ RISCV_REG_X11,
+ RISCV_REG_X12,
+ RISCV_REG_X13,
+ RISCV_REG_X14,
+ RISCV_REG_X15,
+ RISCV_REG_X16,
+ RISCV_REG_X17,
+ RISCV_REG_X18,
+ RISCV_REG_X19,
+ RISCV_REG_X20,
+ RISCV_REG_X21,
+ RISCV_REG_X22,
+ RISCV_REG_X23,
+ RISCV_REG_X24,
+ RISCV_REG_X25,
+ RISCV_REG_X26,
+ RISCV_REG_X27,
+ RISCV_REG_X28,
+ RISCV_REG_X29,
+ RISCV_REG_X30,
+ RISCV_REG_X31,
+
+ RISCV_REG_F0_32,
+ RISCV_REG_F0_64,
+ RISCV_REG_F1_32,
+ RISCV_REG_F1_64,
+ RISCV_REG_F2_32,
+ RISCV_REG_F2_64,
+ RISCV_REG_F3_32,
+ RISCV_REG_F3_64,
+ RISCV_REG_F4_32,
+ RISCV_REG_F4_64,
+ RISCV_REG_F5_32,
+ RISCV_REG_F5_64,
+ RISCV_REG_F6_32,
+ RISCV_REG_F6_64,
+ RISCV_REG_F7_32,
+ RISCV_REG_F7_64,
+ RISCV_REG_F8_32,
+ RISCV_REG_F8_64,
+ RISCV_REG_F9_32,
+ RISCV_REG_F9_64,
+ RISCV_REG_F10_32,
+ RISCV_REG_F10_64,
+ RISCV_REG_F11_32,
+ RISCV_REG_F11_64,
+ RISCV_REG_F12_32,
+ RISCV_REG_F12_64,
+ RISCV_REG_F13_32,
+ RISCV_REG_F13_64,
+ RISCV_REG_F14_32,
+ RISCV_REG_F14_64,
+ RISCV_REG_F15_32,
+ RISCV_REG_F15_64,
+ RISCV_REG_F16_32,
+ RISCV_REG_F16_64,
+ RISCV_REG_F17_32,
+ RISCV_REG_F17_64,
+ RISCV_REG_F18_32,
+ RISCV_REG_F18_64,
+ RISCV_REG_F19_32,
+ RISCV_REG_F19_64,
+ RISCV_REG_F20_32,
+ RISCV_REG_F20_64,
+ RISCV_REG_F21_32,
+ RISCV_REG_F21_64,
+ RISCV_REG_F22_32,
+ RISCV_REG_F22_64,
+ RISCV_REG_F23_32,
+ RISCV_REG_F23_64,
+ RISCV_REG_F24_32,
+ RISCV_REG_F24_64,
+ RISCV_REG_F25_32,
+ RISCV_REG_F25_64,
+ RISCV_REG_F26_32,
+ RISCV_REG_F26_64,
+ RISCV_REG_F27_32,
+ RISCV_REG_F27_64,
+ RISCV_REG_F28_32,
+ RISCV_REG_F28_64,
+ RISCV_REG_F29_32,
+ RISCV_REG_F29_64,
+ RISCV_REG_F30_32,
+ RISCV_REG_F30_64,
+ RISCV_REG_F31_32,
+ RISCV_REG_F31_64,
+ };
+
+ if (r < ARR_SIZE(map))
+ return map[r];
+
+ // cannot find this register
+ return 0;
+}
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVMapping.h b/capstone/arch/RISCV/RISCVMapping.h
new file mode 100644
index 000000000..c592e7fb5
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVMapping.h
@@ -0,0 +1,22 @@
+
+#ifndef CS_RISCV_MAP_H
+#define CS_RISCV_MAP_H
+
+#include "../../include/capstone/capstone.h"
+
+// given internal insn id, return public instruction info
+void RISCV_get_insn_id(cs_struct * h, cs_insn * insn, unsigned int id);
+
+const char *RISCV_insn_name(csh handle, unsigned int id);
+
+const char *RISCV_group_name(csh handle, unsigned int id);
+
+const char *RISCV_reg_name(csh handle, unsigned int reg);
+
+// map instruction name to instruction ID
+riscv_reg RISCV_map_insn(const char *name);
+
+// map internal raw register to 'public' register
+riscv_reg RISCV_map_register(unsigned int r);
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVMappingInsn.inc b/capstone/arch/RISCV/RISCVMappingInsn.inc
new file mode 100644
index 000000000..6789c0b79
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVMappingInsn.inc
@@ -0,0 +1,1635 @@
+// This is auto-gen data for Capstone engine (www.capstone-engine.org)
+// By Nguyen Anh Quynh <aquynh@gmail.com>
+
+{
+ RISCV_ADD, RISCV_INS_ADD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ADDI, RISCV_INS_ADDI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ADDIW, RISCV_INS_ADDIW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ADDW, RISCV_INS_ADDW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_D, RISCV_INS_AMOADD_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_D_AQ, RISCV_INS_AMOADD_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_D_AQ_RL, RISCV_INS_AMOADD_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_D_RL, RISCV_INS_AMOADD_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_W, RISCV_INS_AMOADD_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_W_AQ, RISCV_INS_AMOADD_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_W_AQ_RL, RISCV_INS_AMOADD_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOADD_W_RL, RISCV_INS_AMOADD_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_D, RISCV_INS_AMOAND_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_D_AQ, RISCV_INS_AMOAND_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_D_AQ_RL, RISCV_INS_AMOAND_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_D_RL, RISCV_INS_AMOAND_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_W, RISCV_INS_AMOAND_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_W_AQ, RISCV_INS_AMOAND_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_W_AQ_RL, RISCV_INS_AMOAND_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOAND_W_RL, RISCV_INS_AMOAND_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_D, RISCV_INS_AMOMAXU_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_D_AQ, RISCV_INS_AMOMAXU_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_D_AQ_RL, RISCV_INS_AMOMAXU_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_D_RL, RISCV_INS_AMOMAXU_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_W, RISCV_INS_AMOMAXU_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_W_AQ, RISCV_INS_AMOMAXU_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_W_AQ_RL, RISCV_INS_AMOMAXU_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAXU_W_RL, RISCV_INS_AMOMAXU_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_D, RISCV_INS_AMOMAX_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_D_AQ, RISCV_INS_AMOMAX_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_D_AQ_RL, RISCV_INS_AMOMAX_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_D_RL, RISCV_INS_AMOMAX_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_W, RISCV_INS_AMOMAX_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_W_AQ, RISCV_INS_AMOMAX_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_W_AQ_RL, RISCV_INS_AMOMAX_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMAX_W_RL, RISCV_INS_AMOMAX_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_D, RISCV_INS_AMOMINU_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_D_AQ, RISCV_INS_AMOMINU_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_D_AQ_RL, RISCV_INS_AMOMINU_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_D_RL, RISCV_INS_AMOMINU_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_W, RISCV_INS_AMOMINU_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_W_AQ, RISCV_INS_AMOMINU_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_W_AQ_RL, RISCV_INS_AMOMINU_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMINU_W_RL, RISCV_INS_AMOMINU_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_D, RISCV_INS_AMOMIN_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_D_AQ, RISCV_INS_AMOMIN_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_D_AQ_RL, RISCV_INS_AMOMIN_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_D_RL, RISCV_INS_AMOMIN_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_W, RISCV_INS_AMOMIN_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_W_AQ, RISCV_INS_AMOMIN_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_W_AQ_RL, RISCV_INS_AMOMIN_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOMIN_W_RL, RISCV_INS_AMOMIN_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_D, RISCV_INS_AMOOR_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_D_AQ, RISCV_INS_AMOOR_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_D_AQ_RL, RISCV_INS_AMOOR_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_D_RL, RISCV_INS_AMOOR_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_W, RISCV_INS_AMOOR_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_W_AQ, RISCV_INS_AMOOR_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_W_AQ_RL, RISCV_INS_AMOOR_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOOR_W_RL, RISCV_INS_AMOOR_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_D, RISCV_INS_AMOSWAP_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_D_AQ, RISCV_INS_AMOSWAP_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_D_AQ_RL, RISCV_INS_AMOSWAP_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_D_RL, RISCV_INS_AMOSWAP_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_W, RISCV_INS_AMOSWAP_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_W_AQ, RISCV_INS_AMOSWAP_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_W_AQ_RL, RISCV_INS_AMOSWAP_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOSWAP_W_RL, RISCV_INS_AMOSWAP_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_D, RISCV_INS_AMOXOR_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_D_AQ, RISCV_INS_AMOXOR_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_D_AQ_RL, RISCV_INS_AMOXOR_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_D_RL, RISCV_INS_AMOXOR_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_W, RISCV_INS_AMOXOR_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_W_AQ, RISCV_INS_AMOXOR_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_W_AQ_RL, RISCV_INS_AMOXOR_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AMOXOR_W_RL, RISCV_INS_AMOXOR_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AND, RISCV_INS_AND,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ANDI, RISCV_INS_ANDI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_AUIPC, RISCV_INS_AUIPC,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_BEQ, RISCV_INS_BEQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_BGE, RISCV_INS_BGE,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_BGEU, RISCV_INS_BGEU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_BLT, RISCV_INS_BLT,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_BLTU, RISCV_INS_BLTU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_BNE, RISCV_INS_BNE,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 1, 0
+#endif
+},
+{
+ RISCV_CSRRC, RISCV_INS_CSRRC,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_CSRRCI, RISCV_INS_CSRRCI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_CSRRS, RISCV_INS_CSRRS,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_CSRRSI, RISCV_INS_CSRRSI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_CSRRW, RISCV_INS_CSRRW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_CSRRWI, RISCV_INS_CSRRWI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADD, RISCV_INS_C_ADD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADDI, RISCV_INS_C_ADDI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADDI16SP, RISCV_INS_C_ADDI16SP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADDI4SPN, RISCV_INS_C_ADDI4SPN,
+#ifndef CAPSTONE_DIET
+ { RISCV_REG_X2, 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADDIW, RISCV_INS_C_ADDIW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ADDW, RISCV_INS_C_ADDW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_AND, RISCV_INS_C_AND,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_ANDI, RISCV_INS_C_ANDI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_BEQZ, RISCV_INS_C_BEQZ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 1, 0
+#endif
+},
+{
+ RISCV_C_BNEZ, RISCV_INS_C_BNEZ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 1, 0
+#endif
+},
+{
+ RISCV_C_EBREAK, RISCV_INS_C_EBREAK,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FLD, RISCV_INS_C_FLD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FLDSP, RISCV_INS_C_FLDSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FLW, RISCV_INS_C_FLW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV32, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FLWSP, RISCV_INS_C_FLWSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV32, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FSD, RISCV_INS_C_FSD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FSDSP, RISCV_INS_C_FSDSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FSW, RISCV_INS_C_FSW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV32, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_FSWSP, RISCV_INS_C_FSWSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV32, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_J, RISCV_INS_C_J,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 1, 0
+#endif
+},
+{
+ RISCV_C_JAL, RISCV_INS_C_JAL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { RISCV_REG_X1, 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV32, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_JALR, RISCV_INS_C_JALR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { RISCV_REG_X1, 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_JR, RISCV_INS_C_JR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 1, 1
+#endif
+},
+{
+ RISCV_C_LD, RISCV_INS_C_LD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_LDSP, RISCV_INS_C_LDSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_LI, RISCV_INS_C_LI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_LUI, RISCV_INS_C_LUI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_LW, RISCV_INS_C_LW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_LWSP, RISCV_INS_C_LWSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_MV, RISCV_INS_C_MV,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_NOP, RISCV_INS_C_NOP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_OR, RISCV_INS_C_OR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SD, RISCV_INS_C_SD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SDSP, RISCV_INS_C_SDSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SLLI, RISCV_INS_C_SLLI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SRAI, RISCV_INS_C_SRAI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SRLI, RISCV_INS_C_SRLI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SUB, RISCV_INS_C_SUB,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SUBW, RISCV_INS_C_SUBW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SW, RISCV_INS_C_SW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_SWSP, RISCV_INS_C_SWSP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_UNIMP, RISCV_INS_C_UNIMP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_C_XOR, RISCV_INS_C_XOR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTC, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_DIV, RISCV_INS_DIV,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_DIVU, RISCV_INS_DIVU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_DIVUW, RISCV_INS_DIVUW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_DIVW, RISCV_INS_DIVW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_EBREAK, RISCV_INS_EBREAK,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ECALL, RISCV_INS_ECALL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FADD_D, RISCV_INS_FADD_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FADD_S, RISCV_INS_FADD_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCLASS_D, RISCV_INS_FCLASS_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCLASS_S, RISCV_INS_FCLASS_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_D_L, RISCV_INS_FCVT_D_L,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_D_LU, RISCV_INS_FCVT_D_LU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_D_S, RISCV_INS_FCVT_D_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_D_W, RISCV_INS_FCVT_D_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_D_WU, RISCV_INS_FCVT_D_WU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_LU_D, RISCV_INS_FCVT_LU_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_LU_S, RISCV_INS_FCVT_LU_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_L_D, RISCV_INS_FCVT_L_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_L_S, RISCV_INS_FCVT_L_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_S_D, RISCV_INS_FCVT_S_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_S_L, RISCV_INS_FCVT_S_L,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_S_LU, RISCV_INS_FCVT_S_LU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_S_W, RISCV_INS_FCVT_S_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_S_WU, RISCV_INS_FCVT_S_WU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_WU_D, RISCV_INS_FCVT_WU_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_WU_S, RISCV_INS_FCVT_WU_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_W_D, RISCV_INS_FCVT_W_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FCVT_W_S, RISCV_INS_FCVT_W_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FDIV_D, RISCV_INS_FDIV_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FDIV_S, RISCV_INS_FDIV_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FENCE, RISCV_INS_FENCE,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FENCE_I, RISCV_INS_FENCE_I,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FENCE_TSO, RISCV_INS_FENCE_TSO,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FEQ_D, RISCV_INS_FEQ_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FEQ_S, RISCV_INS_FEQ_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLD, RISCV_INS_FLD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLE_D, RISCV_INS_FLE_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLE_S, RISCV_INS_FLE_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLT_D, RISCV_INS_FLT_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLT_S, RISCV_INS_FLT_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FLW, RISCV_INS_FLW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMADD_D, RISCV_INS_FMADD_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMADD_S, RISCV_INS_FMADD_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMAX_D, RISCV_INS_FMAX_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMAX_S, RISCV_INS_FMAX_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMIN_D, RISCV_INS_FMIN_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMIN_S, RISCV_INS_FMIN_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMSUB_D, RISCV_INS_FMSUB_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMSUB_S, RISCV_INS_FMSUB_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMUL_D, RISCV_INS_FMUL_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMUL_S, RISCV_INS_FMUL_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMV_D_X, RISCV_INS_FMV_D_X,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMV_W_X, RISCV_INS_FMV_W_X,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMV_X_D, RISCV_INS_FMV_X_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FMV_X_W, RISCV_INS_FMV_X_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FNMADD_D, RISCV_INS_FNMADD_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FNMADD_S, RISCV_INS_FNMADD_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FNMSUB_D, RISCV_INS_FNMSUB_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FNMSUB_S, RISCV_INS_FNMSUB_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSD, RISCV_INS_FSD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJN_D, RISCV_INS_FSGNJN_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJN_S, RISCV_INS_FSGNJN_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJX_D, RISCV_INS_FSGNJX_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJX_S, RISCV_INS_FSGNJX_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJ_D, RISCV_INS_FSGNJ_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSGNJ_S, RISCV_INS_FSGNJ_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSQRT_D, RISCV_INS_FSQRT_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSQRT_S, RISCV_INS_FSQRT_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSUB_D, RISCV_INS_FSUB_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTD, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSUB_S, RISCV_INS_FSUB_S,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_FSW, RISCV_INS_FSW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTF, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_JAL, RISCV_INS_JAL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_JALR, RISCV_INS_JALR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LB, RISCV_INS_LB,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LBU, RISCV_INS_LBU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LD, RISCV_INS_LD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LH, RISCV_INS_LH,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LHU, RISCV_INS_LHU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_D, RISCV_INS_LR_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_D_AQ, RISCV_INS_LR_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_D_AQ_RL, RISCV_INS_LR_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_D_RL, RISCV_INS_LR_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_W, RISCV_INS_LR_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_W_AQ, RISCV_INS_LR_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_W_AQ_RL, RISCV_INS_LR_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LR_W_RL, RISCV_INS_LR_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LUI, RISCV_INS_LUI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LW, RISCV_INS_LW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_LWU, RISCV_INS_LWU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MRET, RISCV_INS_MRET,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MUL, RISCV_INS_MUL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MULH, RISCV_INS_MULH,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MULHSU, RISCV_INS_MULHSU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MULHU, RISCV_INS_MULHU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_MULW, RISCV_INS_MULW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_OR, RISCV_INS_OR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_ORI, RISCV_INS_ORI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_REM, RISCV_INS_REM,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_REMU, RISCV_INS_REMU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_REMUW, RISCV_INS_REMUW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_REMW, RISCV_INS_REMW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTM, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SB, RISCV_INS_SB,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_D, RISCV_INS_SC_D,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_D_AQ, RISCV_INS_SC_D_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_D_AQ_RL, RISCV_INS_SC_D_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_D_RL, RISCV_INS_SC_D_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_W, RISCV_INS_SC_W,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_W_AQ, RISCV_INS_SC_W_AQ,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_W_AQ_RL, RISCV_INS_SC_W_AQ_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SC_W_RL, RISCV_INS_SC_W_RL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_HASSTDEXTA, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SD, RISCV_INS_SD,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SFENCE_VMA, RISCV_INS_SFENCE_VMA,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SH, RISCV_INS_SH,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLL, RISCV_INS_SLL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLLI, RISCV_INS_SLLI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLLIW, RISCV_INS_SLLIW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLLW, RISCV_INS_SLLW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLT, RISCV_INS_SLT,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLTI, RISCV_INS_SLTI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLTIU, RISCV_INS_SLTIU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SLTU, RISCV_INS_SLTU,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRA, RISCV_INS_SRA,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRAI, RISCV_INS_SRAI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRAIW, RISCV_INS_SRAIW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRAW, RISCV_INS_SRAW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRET, RISCV_INS_SRET,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRL, RISCV_INS_SRL,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRLI, RISCV_INS_SRLI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRLIW, RISCV_INS_SRLIW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SRLW, RISCV_INS_SRLW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SUB, RISCV_INS_SUB,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SUBW, RISCV_INS_SUBW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { RISCV_GRP_ISRV64, 0 }, 0, 0
+#endif
+},
+{
+ RISCV_SW, RISCV_INS_SW,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_UNIMP, RISCV_INS_UNIMP,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_URET, RISCV_INS_URET,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_WFI, RISCV_INS_WFI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_XOR, RISCV_INS_XOR,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
+{
+ RISCV_XORI, RISCV_INS_XORI,
+#ifndef CAPSTONE_DIET
+ { 0 }, { 0 }, { 0 }, 0, 0
+#endif
+},
diff --git a/capstone/arch/RISCV/RISCVModule.c b/capstone/arch/RISCV/RISCVModule.c
new file mode 100644
index 000000000..cefd4b11a
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVModule.c
@@ -0,0 +1,42 @@
+/* Capstone Disassembly Engine */
+/* RISC-V Backend By Rodrigo Cortes Porto <porto703@gmail.com> &
+ Shawn Chang <citypw@gmail.com>, HardenedLinux@2018 */
+
+#ifdef CAPSTONE_HAS_RISCV
+
+#include "../../utils.h"
+#include "../../MCRegisterInfo.h"
+#include "RISCVDisassembler.h"
+#include "RISCVInstPrinter.h"
+#include "RISCVMapping.h"
+#include "RISCVModule.h"
+
+cs_err RISCV_global_init(cs_struct * ud)
+{
+ MCRegisterInfo *mri;
+ mri = cs_mem_malloc(sizeof(*mri));
+
+ RISCV_init(mri);
+ ud->printer = RISCV_printInst;
+ ud->printer_info = mri;
+ ud->getinsn_info = mri;
+ ud->disasm = RISCV_getInstruction;
+ ud->post_printer = NULL;
+
+ ud->reg_name = RISCV_reg_name;
+ ud->insn_id = RISCV_get_insn_id;
+ ud->insn_name = RISCV_insn_name;
+ ud->group_name = RISCV_group_name;
+
+ return CS_ERR_OK;
+}
+
+cs_err RISCV_option(cs_struct * handle, cs_opt_type type, size_t value)
+{
+ if (type == CS_OPT_SYNTAX)
+ handle->syntax = (int)value;
+
+ return CS_ERR_OK;
+}
+
+#endif
diff --git a/capstone/arch/RISCV/RISCVModule.h b/capstone/arch/RISCV/RISCVModule.h
new file mode 100644
index 000000000..c250db554
--- /dev/null
+++ b/capstone/arch/RISCV/RISCVModule.h
@@ -0,0 +1,12 @@
+/* Capstone Disassembly Engine */
+/* By Shawn Chang <citypw@gmail.com>, HardenedLinux@2018 */
+
+#ifndef CS_RISCV_MODULE_H
+#define CS_RISCV_MODULE_H
+
+#include "../../utils.h"
+
+cs_err RISCV_global_init(cs_struct * ud);
+cs_err RISCV_option(cs_struct * handle, cs_opt_type type, size_t value);
+
+#endif