Skip to content

Class simtix::Instr

ClassList > simtix > Instr

Base class for all different kinds of Instructions. More...

  • #include <instr.h>

Inherited by the following classes: simtix::InstrAuipc, simtix::InstrBranch, simtix::InstrFormosa, simtix::InstrJal, simtix::InstrJalr, simtix::InstrLoad, simtix::InstrLui, simtix::InstrOp, simtix::InstrOpFp, simtix::InstrOpFused, simtix::InstrOpImm, simtix::InstrStore, simtix::InstrSystem, simtix::InstrTrap

Public Types

Type Name
enum uint8_t ExecutionUnit
enum uint8_t Opcode
Opcode definitions.

Public Functions

Type Name
virtual void Assign (const Instr * other)
virtual bool CanCommit () const = 0
virtual bool CanExecute () const = 0
virtual bool CanIssue () const = 0
virtual bool CanRetire () const = 0
virtual void Commit () = 0
virtual void Decode ()
virtual void Execute () = 0
virtual void Issue ()
virtual void OperandCollect () = 0
virtual void Reset ()
virtual bool barrier_valid () const
virtual bool exception_valid () const
ExecutionUnit execution_unit () const
bool illegal () const
uint32_t iword () const
virtual bool may_change_ctrl_flow () const
uint8_t opcode () const
void set_ssw (std::optional< uint32_t > ssw)
uint32_t sswid () const
uint8_t tswid () const
uint32_t wid () const
uint64_t wpc () const

Public Static Functions

Type Name
constexpr uint32_t BitMask (uint32_t width)
uint8_t DecodeFunct3 (uint32_t iword)
uint8_t DecodeFunct7 (uint32_t iword)
uint8_t DecodeOpcode (uint32_t iword)
uint8_t DecodeRd (uint32_t iword)
uint8_t DecodeRs1 (uint32_t iword)
uint8_t DecodeRs2 (uint32_t iword)

Protected Attributes

Type Name
std::vector< Thread * > active_threads_
ExecutionUnit execution_unit_ = kALU
uint8_t funct3_ = 0
uint8_t funct7_ = 0
bool illegal_ = false
uint32_t iword_
std::string mnemonic_
uint8_t opcode_ = 0
uint8_t rd_ = 0
uint8_t rs1_ = 0
uint8_t rs2_ = 0
std::optional< uint32_t > ssw_
uint8_t tswid_ = 0
Warp * warp_
uint64_t wpc_

Protected Functions

Type Name
Instr (Warp * warp, uint32_t iword, uint64_t wpc)
virtual void Reinitialize (Warp * warp, uint32_t iword, uint64_t wpc)
virtual ~Instr () = default

Detailed Description

This is an abstract class that defines multiple API to perform different operations to an instruction.

Public Types Documentation

enum ExecutionUnit

enum simtix::Instr::ExecutionUnit {
    kALU = 0,
    kLSU,
    kMul,
    kDiv,
    kFPU
};

enum Opcode

Opcode definitions.

enum simtix::Instr::Opcode {
    kLoad = 0b0000011,
    kStore = 0b0100011,
    kBranch = 0b1100011,
    kCustom1 = 0b0101011,
    kOpImm = 0b0010011,
    kOp = 0b0110011,
    kSystem = 0b1110011,
    kAuipc = 0b0010111,
    kLui = 0b0110111,
    kOpImm32 = 0b0011011,
    kOp32 = 0b0111011,
    kFmadd = 0b1000011,
    kFmsub = 0b1000111,
    kFnmsub = 0b1001011,
    kFnmadd = 0b1001111,
    kOpFp = 0b1010011,
    kJal = 0b1101111,
    kJalr = 0b1100111
};


Public Functions Documentation

function Assign

virtual void simtix::Instr::Assign (
    const Instr * other
) 

function CanCommit

virtual bool simtix::Instr::CanCommit () const = 0

function CanExecute

virtual bool simtix::Instr::CanExecute () const = 0

function CanIssue

virtual bool simtix::Instr::CanIssue () const = 0

function CanRetire

virtual bool simtix::Instr::CanRetire () const = 0

function Commit

virtual void simtix::Instr::Commit () = 0

function Decode

virtual void simtix::Instr::Decode () 

function Execute

virtual void simtix::Instr::Execute () = 0

function Issue

virtual void simtix::Instr::Issue () 

function OperandCollect

virtual void simtix::Instr::OperandCollect () = 0

function Reset

virtual void simtix::Instr::Reset () 

function barrier_valid

inline virtual bool simtix::Instr::barrier_valid () const

function exception_valid

inline virtual bool simtix::Instr::exception_valid () const

function execution_unit

inline ExecutionUnit simtix::Instr::execution_unit () const

function illegal

inline bool simtix::Instr::illegal () const

function iword

inline uint32_t simtix::Instr::iword () const

function may_change_ctrl_flow

inline virtual bool simtix::Instr::may_change_ctrl_flow () const

function opcode

inline uint8_t simtix::Instr::opcode () const

function set_ssw

inline void simtix::Instr::set_ssw (
    std::optional< uint32_t > ssw
) 

function sswid

inline uint32_t simtix::Instr::sswid () const

function tswid

inline uint8_t simtix::Instr::tswid () const

function wid

inline uint32_t simtix::Instr::wid () const

function wpc

inline uint64_t simtix::Instr::wpc () const

Public Static Functions Documentation

function BitMask

static inline constexpr uint32_t simtix::Instr::BitMask (
    uint32_t width
) 

function DecodeFunct3

static inline uint8_t simtix::Instr::DecodeFunct3 (
    uint32_t iword
) 

function DecodeFunct7

static inline uint8_t simtix::Instr::DecodeFunct7 (
    uint32_t iword
) 

function DecodeOpcode

static inline uint8_t simtix::Instr::DecodeOpcode (
    uint32_t iword
) 

function DecodeRd

static inline uint8_t simtix::Instr::DecodeRd (
    uint32_t iword
) 

function DecodeRs1

static inline uint8_t simtix::Instr::DecodeRs1 (
    uint32_t iword
) 

function DecodeRs2

static inline uint8_t simtix::Instr::DecodeRs2 (
    uint32_t iword
) 

Protected Attributes Documentation

variable active_threads_

std::vector<Thread *> simtix::Instr::active_threads_;

variable execution_unit_

ExecutionUnit simtix::Instr::execution_unit_;

variable funct3_

uint8_t simtix::Instr::funct3_;

variable funct7_

uint8_t simtix::Instr::funct7_;

variable illegal_

bool simtix::Instr::illegal_;

variable iword_

uint32_t simtix::Instr::iword_;

variable mnemonic_

std::string simtix::Instr::mnemonic_;

variable opcode_

uint8_t simtix::Instr::opcode_;

variable rd_

uint8_t simtix::Instr::rd_;

variable rs1_

uint8_t simtix::Instr::rs1_;

variable rs2_

uint8_t simtix::Instr::rs2_;

variable ssw_

std::optional<uint32_t> simtix::Instr::ssw_;

variable tswid_

uint8_t simtix::Instr::tswid_;

variable warp_

Warp* simtix::Instr::warp_;

variable wpc_

uint64_t simtix::Instr::wpc_;

Protected Functions Documentation

function Instr

inline simtix::Instr::Instr (
    Warp * warp,
    uint32_t iword,
    uint64_t wpc
) 

function Reinitialize

inline virtual void simtix::Instr::Reinitialize (
    Warp * warp,
    uint32_t iword,
    uint64_t wpc
) 

function ~Instr

virtual simtix::Instr::~Instr () = default


The documentation for this class was generated from the following file projects/simtix/src/simtix/sm/instr.h