LLDB mainline
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)
 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

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)
Value:
#define 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.