LLDB mainline
Classes | Namespaces | Macros | Typedefs | Functions | Variables
RISCVInstructions.h File Reference
#include <cstdint>
#include <optional>
#include <variant>
#include "llvm/ADT/APFloat.h"

Go to the source code of this file.

Classes

struct  lldb_private::Rd
 
struct  lldb_private::Rs
 
struct  lldb_private::B
 
struct  lldb_private::InstrPattern
 
struct  lldb_private::DecodeResult
 

Namespaces

namespace  lldb_private
 A class that represents a running process on the host machine.
 

Macros

#define DERIVE_EQ(NAME)
 
#define I_TYPE_INST(NAME)
 
#define S_TYPE_INST(NAME)
 
#define U_TYPE_INST(NAME)
 
#define J_TYPE_INST(NAME)   U_TYPE_INST(NAME)
 The memory layout are the same in our code.
 
#define R_TYPE_INST(NAME)
 
#define R_SHAMT_TYPE_INST(NAME)
 
#define R_RS1_TYPE_INST(NAME)
 
#define R4_TYPE_INST(NAME)
 
#define INVALID_INST(NAME)
 The inst fields are used for debugging.
 

Typedefs

using lldb_private::RISCVInst = std::variant< LUI, AUIPC, JAL, JALR, B, LB, LH, LW, LBU, LHU, SB, SH, SW, ADDI, SLTI, SLTIU, XORI, ORI, ANDI, ADD, SUB, SLL, SLT, SLTU, XOR, SRL, SRA, OR, AND, LWU, LD, SD, SLLI, SRLI, SRAI, ADDIW, SLLIW, SRLIW, SRAIW, ADDW, SUBW, SLLW, SRLW, SRAW, MUL, MULH, MULHSU, MULHU, DIV, DIVU, REM, REMU, MULW, DIVW, DIVUW, REMW, REMUW, LR_W, SC_W, AMOSWAP_W, AMOADD_W, AMOXOR_W, AMOAND_W, AMOOR_W, AMOMIN_W, AMOMAX_W, AMOMINU_W, AMOMAXU_W, LR_D, SC_D, AMOSWAP_D, AMOADD_D, AMOXOR_D, AMOAND_D, AMOOR_D, AMOMIN_D, AMOMAX_D, AMOMINU_D, AMOMAXU_D, FLW, FSW, FMADD_S, FMSUB_S, FNMADD_S, FNMSUB_S, FADD_S, FSUB_S, FMUL_S, FDIV_S, FSQRT_S, FSGNJ_S, FSGNJN_S, FSGNJX_S, FMIN_S, FMAX_S, FCVT_W_S, FCVT_WU_S, FMV_X_W, FEQ_S, FLT_S, FLE_S, FCLASS_S, FCVT_S_W, FCVT_S_WU, FMV_W_X, FCVT_L_S, FCVT_LU_S, FCVT_S_L, FCVT_S_LU, FLD, FSD, FMADD_D, FMSUB_D, FNMSUB_D, FNMADD_D, FADD_D, FSUB_D, FMUL_D, FDIV_D, FSQRT_D, FSGNJ_D, FSGNJN_D, FSGNJX_D, FMIN_D, FMAX_D, FCVT_S_D, FCVT_D_S, FEQ_D, FLT_D, FLE_D, FCLASS_D, FCVT_W_D, FCVT_WU_D, FCVT_D_W, FCVT_D_WU, FCVT_L_D, FCVT_LU_D, FMV_X_D, FCVT_D_L, FCVT_D_LU, FMV_D_X, INVALID, EBREAK, RESERVED, HINT, NOP >
 

Functions

 lldb_private::U_TYPE_INST (LUI)
 
 lldb_private::U_TYPE_INST (AUIPC)
 
 lldb_private::J_TYPE_INST (JAL)
 
 lldb_private::I_TYPE_INST (JALR)
 
 lldb_private::I_TYPE_INST (LB)
 
 lldb_private::I_TYPE_INST (LH)
 
 lldb_private::I_TYPE_INST (LW)
 
 lldb_private::I_TYPE_INST (LBU)
 
 lldb_private::I_TYPE_INST (LHU)
 
 lldb_private::S_TYPE_INST (SB)
 
 lldb_private::S_TYPE_INST (SH)
 
 lldb_private::S_TYPE_INST (SW)
 
 lldb_private::I_TYPE_INST (ADDI)
 
 lldb_private::I_TYPE_INST (SLTI)
 
 lldb_private::I_TYPE_INST (SLTIU)
 
 lldb_private::I_TYPE_INST (XORI)
 
 lldb_private::I_TYPE_INST (ORI)
 
 lldb_private::I_TYPE_INST (ANDI)
 
 lldb_private::R_TYPE_INST (ADD)
 
 lldb_private::R_TYPE_INST (SUB)
 
 lldb_private::R_TYPE_INST (SLL)
 
 lldb_private::R_TYPE_INST (SLT)
 
 lldb_private::R_TYPE_INST (SLTU)
 
 lldb_private::R_TYPE_INST (XOR)
 
 lldb_private::R_TYPE_INST (SRL)
 
 lldb_private::R_TYPE_INST (SRA)
 
 lldb_private::R_TYPE_INST (OR)
 
 lldb_private::R_TYPE_INST (AND)
 
 lldb_private::I_TYPE_INST (LWU)
 
 lldb_private::I_TYPE_INST (LD)
 
 lldb_private::S_TYPE_INST (SD)
 
 lldb_private::R_SHAMT_TYPE_INST (SLLI)
 
 lldb_private::R_SHAMT_TYPE_INST (SRLI)
 
 lldb_private::R_SHAMT_TYPE_INST (SRAI)
 
 lldb_private::I_TYPE_INST (ADDIW)
 
 lldb_private::R_SHAMT_TYPE_INST (SLLIW)
 
 lldb_private::R_SHAMT_TYPE_INST (SRLIW)
 
 lldb_private::R_SHAMT_TYPE_INST (SRAIW)
 
 lldb_private::R_TYPE_INST (ADDW)
 
 lldb_private::R_TYPE_INST (SUBW)
 
 lldb_private::R_TYPE_INST (SLLW)
 
 lldb_private::R_TYPE_INST (SRLW)
 
 lldb_private::R_TYPE_INST (SRAW)
 
 lldb_private::R_TYPE_INST (MUL)
 
 lldb_private::R_TYPE_INST (MULH)
 
 lldb_private::R_TYPE_INST (MULHSU)
 
 lldb_private::R_TYPE_INST (MULHU)
 
 lldb_private::R_TYPE_INST (DIV)
 
 lldb_private::R_TYPE_INST (DIVU)
 
 lldb_private::R_TYPE_INST (REM)
 
 lldb_private::R_TYPE_INST (REMU)
 
 lldb_private::R_TYPE_INST (MULW)
 
 lldb_private::R_TYPE_INST (DIVW)
 
 lldb_private::R_TYPE_INST (DIVUW)
 
 lldb_private::R_TYPE_INST (REMW)
 
 lldb_private::R_TYPE_INST (REMUW)
 
 lldb_private::R_RS1_TYPE_INST (LR_W)
 
 lldb_private::R_TYPE_INST (SC_W)
 
 lldb_private::R_TYPE_INST (AMOSWAP_W)
 
 lldb_private::R_TYPE_INST (AMOADD_W)
 
 lldb_private::R_TYPE_INST (AMOXOR_W)
 
 lldb_private::R_TYPE_INST (AMOAND_W)
 
 lldb_private::R_TYPE_INST (AMOOR_W)
 
 lldb_private::R_TYPE_INST (AMOMIN_W)
 
 lldb_private::R_TYPE_INST (AMOMAX_W)
 
 lldb_private::R_TYPE_INST (AMOMINU_W)
 
 lldb_private::R_TYPE_INST (AMOMAXU_W)
 
 lldb_private::R_RS1_TYPE_INST (LR_D)
 
 lldb_private::R_TYPE_INST (SC_D)
 
 lldb_private::R_TYPE_INST (AMOSWAP_D)
 
 lldb_private::R_TYPE_INST (AMOADD_D)
 
 lldb_private::R_TYPE_INST (AMOXOR_D)
 
 lldb_private::R_TYPE_INST (AMOAND_D)
 
 lldb_private::R_TYPE_INST (AMOOR_D)
 
 lldb_private::R_TYPE_INST (AMOMIN_D)
 
 lldb_private::R_TYPE_INST (AMOMAX_D)
 
 lldb_private::R_TYPE_INST (AMOMINU_D)
 
 lldb_private::R_TYPE_INST (AMOMAXU_D)
 
 lldb_private::I_TYPE_INST (FLW)
 
 lldb_private::S_TYPE_INST (FSW)
 
 lldb_private::R4_TYPE_INST (FMADD_S)
 
 lldb_private::R4_TYPE_INST (FMSUB_S)
 
 lldb_private::R4_TYPE_INST (FNMADD_S)
 
 lldb_private::R4_TYPE_INST (FNMSUB_S)
 
 lldb_private::R_TYPE_INST (FADD_S)
 
 lldb_private::R_TYPE_INST (FSUB_S)
 
 lldb_private::R_TYPE_INST (FMUL_S)
 
 lldb_private::R_TYPE_INST (FDIV_S)
 
 lldb_private::I_TYPE_INST (FSQRT_S)
 
 lldb_private::R_TYPE_INST (FSGNJ_S)
 
 lldb_private::R_TYPE_INST (FSGNJN_S)
 
 lldb_private::R_TYPE_INST (FSGNJX_S)
 
 lldb_private::R_TYPE_INST (FMIN_S)
 
 lldb_private::R_TYPE_INST (FMAX_S)
 
 lldb_private::I_TYPE_INST (FCVT_W_S)
 
 lldb_private::I_TYPE_INST (FCVT_WU_S)
 
 lldb_private::I_TYPE_INST (FMV_X_W)
 
 lldb_private::R_TYPE_INST (FEQ_S)
 
 lldb_private::R_TYPE_INST (FLT_S)
 
 lldb_private::R_TYPE_INST (FLE_S)
 
 lldb_private::I_TYPE_INST (FCLASS_S)
 
 lldb_private::I_TYPE_INST (FCVT_S_W)
 
 lldb_private::I_TYPE_INST (FCVT_S_WU)
 
 lldb_private::I_TYPE_INST (FMV_W_X)
 
 lldb_private::I_TYPE_INST (FCVT_L_S)
 
 lldb_private::I_TYPE_INST (FCVT_LU_S)
 
 lldb_private::I_TYPE_INST (FCVT_S_L)
 
 lldb_private::I_TYPE_INST (FCVT_S_LU)
 
 lldb_private::I_TYPE_INST (FLD)
 
 lldb_private::S_TYPE_INST (FSD)
 
 lldb_private::R4_TYPE_INST (FMADD_D)
 
 lldb_private::R4_TYPE_INST (FMSUB_D)
 
 lldb_private::R4_TYPE_INST (FNMSUB_D)
 
 lldb_private::R4_TYPE_INST (FNMADD_D)
 
 lldb_private::R_TYPE_INST (FADD_D)
 
 lldb_private::R_TYPE_INST (FSUB_D)
 
 lldb_private::R_TYPE_INST (FMUL_D)
 
 lldb_private::R_TYPE_INST (FDIV_D)
 
 lldb_private::I_TYPE_INST (FSQRT_D)
 
 lldb_private::R_TYPE_INST (FSGNJ_D)
 
 lldb_private::R_TYPE_INST (FSGNJN_D)
 
 lldb_private::R_TYPE_INST (FSGNJX_D)
 
 lldb_private::R_TYPE_INST (FMIN_D)
 
 lldb_private::R_TYPE_INST (FMAX_D)
 
 lldb_private::I_TYPE_INST (FCVT_S_D)
 
 lldb_private::I_TYPE_INST (FCVT_D_S)
 
 lldb_private::R_TYPE_INST (FEQ_D)
 
 lldb_private::R_TYPE_INST (FLT_D)
 
 lldb_private::R_TYPE_INST (FLE_D)
 
 lldb_private::I_TYPE_INST (FCLASS_D)
 
 lldb_private::I_TYPE_INST (FCVT_W_D)
 
 lldb_private::I_TYPE_INST (FCVT_WU_D)
 
 lldb_private::I_TYPE_INST (FCVT_D_W)
 
 lldb_private::I_TYPE_INST (FCVT_D_WU)
 
 lldb_private::I_TYPE_INST (FCVT_L_D)
 
 lldb_private::I_TYPE_INST (FCVT_LU_D)
 
 lldb_private::I_TYPE_INST (FMV_X_D)
 
 lldb_private::I_TYPE_INST (FCVT_D_L)
 
 lldb_private::I_TYPE_INST (FCVT_D_LU)
 
 lldb_private::I_TYPE_INST (FMV_D_X)
 
 lldb_private::INVALID_INST (INVALID)
 Invalid and reserved instructions, the inst fields are used for debugging.
 
 lldb_private::INVALID_INST (RESERVED)
 
 lldb_private::INVALID_INST (EBREAK)
 
 lldb_private::INVALID_INST (HINT)
 
 lldb_private::INVALID_INST (NOP)
 
constexpr uint32_t lldb_private::DecodeRD (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeRS1 (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeRS2 (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeRS3 (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeFunct3 (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeFunct2 (uint32_t inst)
 
constexpr uint32_t lldb_private::DecodeFunct7 (uint32_t inst)
 
constexpr int32_t lldb_private::DecodeRM (uint32_t inst)
 
constexpr uint64_t lldb_private::NanBoxing (uint64_t val)
 RISC-V spec: The upper bits of a valid NaN-boxed value must be all 1s.
 
constexpr uint32_t lldb_private::NanUnBoxing (uint64_t val)
 

Variables

constexpr uint8_t lldb_private::RV32 = 1
 
constexpr uint8_t lldb_private::RV64 = 2
 
constexpr uint8_t lldb_private::RV128 = 4
 

Macro Definition Documentation

◆ DERIVE_EQ

#define DERIVE_EQ (   NAME)
Value:
bool operator==(const NAME &r) const { \
return std::memcmp(this, &r, sizeof(NAME)) == 0; \
}

Definition at line 38 of file RISCVInstructions.h.

◆ I_TYPE_INST

#define I_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
Rs rs1; \
uint32_t imm; \
DERIVE_EQ(NAME); \
}

Definition at line 43 of file RISCVInstructions.h.

◆ INVALID_INST

#define INVALID_INST (   NAME)
Value:
struct NAME { \
uint32_t inst; \
DERIVE_EQ(NAME); \
}

The inst fields are used for debugging.

Definition at line 95 of file RISCVInstructions.h.

◆ J_TYPE_INST

#define J_TYPE_INST (   NAME)    U_TYPE_INST(NAME)

The memory layout are the same in our code.

Definition at line 64 of file RISCVInstructions.h.

◆ R4_TYPE_INST

#define R4_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
Rs rs1; \
Rs rs2; \
Rs rs3; \
int32_t rm; \
DERIVE_EQ(NAME); \
}

Definition at line 85 of file RISCVInstructions.h.

◆ R_RS1_TYPE_INST

#define R_RS1_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
Rs rs1; \
DERIVE_EQ(NAME); \
}

Definition at line 79 of file RISCVInstructions.h.

◆ R_SHAMT_TYPE_INST

#define R_SHAMT_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
Rs rs1; \
uint32_t shamt; \
DERIVE_EQ(NAME); \
}

Definition at line 72 of file RISCVInstructions.h.

◆ R_TYPE_INST

#define R_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
Rs rs1; \
Rs rs2; \
DERIVE_EQ(NAME); \
}

Definition at line 65 of file RISCVInstructions.h.

◆ S_TYPE_INST

#define S_TYPE_INST (   NAME)
Value:
struct NAME { \
Rs rs1; \
Rs rs2; \
uint32_t imm; \
DERIVE_EQ(NAME); \
}

Definition at line 50 of file RISCVInstructions.h.

◆ U_TYPE_INST

#define U_TYPE_INST (   NAME)
Value:
struct NAME { \
Rd rd; \
uint32_t imm; \
DERIVE_EQ(NAME); \
}

Definition at line 57 of file RISCVInstructions.h.