Enum Instruction

Source
pub enum Instruction {
Show 124 variants LUI { dest: IRegister, imm: UImmediate, }, AUIPC { dest: IRegister, imm: UImmediate, }, JAL { dest: IRegister, offset: JImmediate, }, JALR { dest: IRegister, base: IRegister, offset: IImmediate, }, BEQ { src1: IRegister, src2: IRegister, offset: BImmediate, }, BNE { src1: IRegister, src2: IRegister, offset: BImmediate, }, BLT { src1: IRegister, src2: IRegister, offset: BImmediate, }, BGE { src1: IRegister, src2: IRegister, offset: BImmediate, }, BLTU { src1: IRegister, src2: IRegister, offset: BImmediate, }, BGEU { src1: IRegister, src2: IRegister, offset: BImmediate, }, LB { dest: IRegister, base: IRegister, offset: IImmediate, }, LH { dest: IRegister, base: IRegister, offset: IImmediate, }, LW { dest: IRegister, base: IRegister, offset: IImmediate, }, LBU { dest: IRegister, base: IRegister, offset: IImmediate, }, LHU { dest: IRegister, base: IRegister, offset: IImmediate, }, SB { src: IRegister, base: IRegister, offset: SImmediate, }, SH { src: IRegister, base: IRegister, offset: SImmediate, }, SW { src: IRegister, base: IRegister, offset: SImmediate, }, ADDI { dest: IRegister, src: IRegister, imm: IImmediate, }, SLTI { dest: IRegister, src: IRegister, imm: IImmediate, }, SLTIU { dest: IRegister, src: IRegister, imm: IImmediate, }, XORI { dest: IRegister, src: IRegister, imm: IImmediate, }, ORI { dest: IRegister, src: IRegister, imm: IImmediate, }, ANDI { dest: IRegister, src: IRegister, imm: IImmediate, }, SLLI { dest: IRegister, src: IRegister, shamt: Shamt, }, SRLI { dest: IRegister, src: IRegister, shamt: Shamt, }, SRAI { dest: IRegister, src: IRegister, shamt: Shamt, }, ADD { dest: IRegister, src1: IRegister, src2: IRegister, }, SUB { dest: IRegister, src1: IRegister, src2: IRegister, }, SLL { dest: IRegister, src1: IRegister, src2: IRegister, }, SLT { dest: IRegister, src1: IRegister, src2: IRegister, }, SLTU { dest: IRegister, src1: IRegister, src2: IRegister, }, XOR { dest: IRegister, src1: IRegister, src2: IRegister, }, SRL { dest: IRegister, src1: IRegister, src2: IRegister, }, SRA { dest: IRegister, src1: IRegister, src2: IRegister, }, OR { dest: IRegister, src1: IRegister, src2: IRegister, }, AND { dest: IRegister, src1: IRegister, src2: IRegister, }, FENCE { rd: IRegister, rs1: IRegister, ops: u8, fm: u8, }, ECALL, EBREAK, LWU { dest: IRegister, base: IRegister, offset: IImmediate, }, LD { dest: IRegister, base: IRegister, offset: IImmediate, }, SD { src: IRegister, base: IRegister, offset: SImmediate, }, ADDIW { dest: IRegister, src: IRegister, imm: IImmediate, }, SLLIW { dest: IRegister, src: IRegister, shamt: ShamtW, }, SRLIW { dest: IRegister, src: IRegister, shamt: ShamtW, }, SRAIW { dest: IRegister, src: IRegister, shamt: ShamtW, }, ADDW { dest: IRegister, src1: IRegister, src2: IRegister, }, SUBW { dest: IRegister, src1: IRegister, src2: IRegister, }, SLLW { dest: IRegister, src1: IRegister, src2: IRegister, }, SRLW { dest: IRegister, src1: IRegister, src2: IRegister, }, SRAW { dest: IRegister, src1: IRegister, src2: IRegister, }, MUL { dest: IRegister, src1: IRegister, src2: IRegister, }, MULH { dest: IRegister, src1: IRegister, src2: IRegister, }, MULHSU { dest: IRegister, src1: IRegister, src2: IRegister, }, MULHU { dest: IRegister, src1: IRegister, src2: IRegister, }, DIV { dest: IRegister, src1: IRegister, src2: IRegister, }, DIVU { dest: IRegister, src1: IRegister, src2: IRegister, }, REM { dest: IRegister, src1: IRegister, src2: IRegister, }, REMU { dest: IRegister, src1: IRegister, src2: IRegister, }, MULW { dest: IRegister, src1: IRegister, src2: IRegister, }, DIVW { dest: IRegister, src1: IRegister, src2: IRegister, }, DIVUW { dest: IRegister, src1: IRegister, src2: IRegister, }, REMW { dest: IRegister, src1: IRegister, src2: IRegister, }, REMUW { dest: IRegister, src1: IRegister, src2: IRegister, }, LRW { dest: IRegister, addr: IRegister, aq: bool, rl: bool, }, SCW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOSWAPW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOADDW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOXORW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOANDW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOORW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMINW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMAXW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMINUW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMAXUW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, LRD { dest: IRegister, addr: IRegister, aq: bool, rl: bool, }, SCD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOSWAPD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOADDD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOXORD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOANDD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOORD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMIND { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMAXD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMINUD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AMOMAXUD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, FLW { dest: FRegister, base: IRegister, offset: IImmediate, }, FSW { base: IRegister, src: FRegister, offset: SImmediate, }, FMADDS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FMSUBS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FNMSUBS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FNMADDS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FADDS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FSUBS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FMULS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FDIVS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FSQRTS { dest: FRegister, src: FRegister, rm: RoundingMode, }, FSGNJS { dest: FRegister, src1: FRegister, src2: FRegister, }, FSGNJNS { dest: FRegister, src1: FRegister, src2: FRegister, }, FSGNJXS { dest: FRegister, src1: FRegister, src2: FRegister, }, FMINS { dest: FRegister, src1: FRegister, src2: FRegister, }, FMAXS { dest: FRegister, src1: FRegister, src2: FRegister, }, FCVTWS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FCVTWUS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FMVXW { dest: IRegister, src: FRegister, }, FEQS { dest: IRegister, src1: FRegister, src2: FRegister, }, FLTS { dest: IRegister, src1: FRegister, src2: FRegister, }, FLES { dest: IRegister, src1: FRegister, src2: FRegister, }, FCLASSS { dest: IRegister, src: FRegister, }, FCVTSW { dest: FRegister, src: IRegister, rm: RoundingMode, }, FCVTSWU { dest: FRegister, src: IRegister, rm: RoundingMode, }, FMVWX { dest: FRegister, src: IRegister, }, FCVTLS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FCVTLUS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FCVTSL { dest: FRegister, src: IRegister, rm: RoundingMode, }, FCVTSLU { dest: FRegister, src: IRegister, rm: RoundingMode, }, CSRRW { dest: IRegister, src: IRegister, csr: CSR, }, CSRRS { dest: IRegister, src: IRegister, csr: CSR, }, CSRRC { dest: IRegister, src: IRegister, csr: CSR, }, CSRRWI { dest: IRegister, imm: CSRImmediate, csr: CSR, }, CSRRSI { dest: IRegister, imm: CSRImmediate, csr: CSR, }, CSRRCI { dest: IRegister, imm: CSRImmediate, csr: CSR, }, FENCEI,
}

Variants§

§

LUI

Load upper immediate

Fields

§

AUIPC

Add upper immediate to PC

Fields

§

JAL

Jump and Link

Fields

§offset: JImmediate
§

JALR

Jump and Link Register

Fields

§offset: IImmediate
§

BEQ

Fields

§offset: BImmediate
§

BNE

Fields

§offset: BImmediate
§

BLT

Fields

§offset: BImmediate
§

BGE

Fields

§offset: BImmediate
§

BLTU

Fields

§offset: BImmediate
§

BGEU

Fields

§offset: BImmediate
§

LB

Load Byte

Fields

§offset: IImmediate
§

LH

Load Halfword

Fields

§offset: IImmediate
§

LW

Load Word

Fields

§offset: IImmediate
§

LBU

Load Byte Unsigned

Fields

§offset: IImmediate
§

LHU

Load Halfword Unsigned

Fields

§offset: IImmediate
§

SB

Store Byte

Fields

§offset: SImmediate
§

SH

Store Halfword

Fields

§offset: SImmediate
§

SW

Store Word

Fields

§offset: SImmediate
§

ADDI

§

SLTI

§

SLTIU

§

XORI

§

ORI

§

ANDI

§

SLLI

Left Shift Immediate

Fields

§shamt: Shamt
§

SRLI

Logical Right Shift Immediate

Fields

§shamt: Shamt
§

SRAI

Arithmetic Right Shift Immediate

Fields

§shamt: Shamt
§

ADD

Fields

§

SUB

Fields

§

SLL

Left Shift

Fields

§

SLT

Branch if Equal

Fields

§

SLTU

Fields

§

XOR

Fields

§

SRL

Logical Right Shift Immediate

Fields

§

SRA

Arithmetic Right Shift Immediate

Fields

§

OR

Fields

§

AND

Fields

§

FENCE

Fields

§ops: u8
§fm: u8
§

ECALL

§

EBREAK

§

LWU

Load Word Unsigned

Fields

§offset: IImmediate
§

LD

Load Doubleword

Fields

§offset: IImmediate
§

SD

Store Doubleword

Fields

§offset: SImmediate
§

ADDIW

Add Immediate (word)

§

SLLIW

Left Shift Immediate (word)

Fields

§shamt: ShamtW
§

SRLIW

Logical Right Shift Immediate (word)

Fields

§shamt: ShamtW
§

SRAIW

Arithmetic Right Shift Immediate (word)

Fields

§shamt: ShamtW
§

ADDW

Add (word)

Fields

§

SUBW

Subtract (word)

Fields

§

SLLW

Left Shift (word)

Fields

§

SRLW

Logical Right Shift (word)

Fields

§

SRAW

Arithmetic Right Shift (word)

Fields

§

MUL

Multiply

Fields

§

MULH

Multiply (High bits)

Fields

§

MULHSU

Multiply Signed-Unsigned (High bits)

Fields

§

MULHU

Multiply Unsigned (High)

Fields

§

DIV

Divide

Fields

§

DIVU

Divide (Unsigned)

Fields

§

REM

Remainder

Fields

§

REMU

Remainder (Unsigned)

Fields

§

MULW

Multiply Word

Fields

§

DIVW

Divide Word

Fields

§

DIVUW

Divide Unsigned Word

Fields

§

REMW

Remainder Word

Fields

§

REMUW

Remainder Unsigned Word

Fields

§

LRW

Load Reserved Word

Fields

§aq: bool
§rl: bool
§

SCW

Fields

§aq: bool
§rl: bool
§

AMOSWAPW

Fields

§aq: bool
§rl: bool
§

AMOADDW

Fields

§aq: bool
§rl: bool
§

AMOXORW

Fields

§aq: bool
§rl: bool
§

AMOANDW

Fields

§aq: bool
§rl: bool
§

AMOORW

Fields

§aq: bool
§rl: bool
§

AMOMINW

Fields

§aq: bool
§rl: bool
§

AMOMAXW

Fields

§aq: bool
§rl: bool
§

AMOMINUW

Fields

§aq: bool
§rl: bool
§

AMOMAXUW

Fields

§aq: bool
§rl: bool
§

LRD

Fields

§aq: bool
§rl: bool
§

SCD

Fields

§aq: bool
§rl: bool
§

AMOSWAPD

Fields

§aq: bool
§rl: bool
§

AMOADDD

Fields

§aq: bool
§rl: bool
§

AMOXORD

Fields

§aq: bool
§rl: bool
§

AMOANDD

Fields

§aq: bool
§rl: bool
§

AMOORD

Fields

§aq: bool
§rl: bool
§

AMOMIND

Fields

§aq: bool
§rl: bool
§

AMOMAXD

Fields

§aq: bool
§rl: bool
§

AMOMINUD

Fields

§aq: bool
§rl: bool
§

AMOMAXUD

Fields

§aq: bool
§rl: bool
§

FLW

Fields

§offset: IImmediate
§

FSW

Fields

§offset: SImmediate
§

FMADDS

§

FMSUBS

§

FNMSUBS

§

FNMADDS

§

FADDS

§

FSUBS

§

FMULS

§

FDIVS

§

FSQRTS

§

FSGNJS

Fields

§

FSGNJNS

Fields

§

FSGNJXS

Fields

§

FMINS

Fields

§

FMAXS

Fields

§

FCVTWS

§

FCVTWUS

§

FMVXW

Fields

§

FEQS

Fields

§

FLTS

Fields

§

FLES

Fields

§

FCLASSS

Fields

§

FCVTSW

§

FCVTSWU

§

FMVWX

Fields

§

FCVTLS

§

FCVTLUS

§

FCVTSL

§

FCVTSLU

§

CSRRW

Fields

§csr: CSR
§

CSRRS

Fields

§csr: CSR
§

CSRRC

Fields

§csr: CSR
§

CSRRWI

Fields

§csr: CSR
§

CSRRSI

Fields

§csr: CSR
§

CSRRCI

Fields

§csr: CSR
§

FENCEI

Implementations§

Source§

impl Instruction

Source

pub fn decode(instruction: u32) -> Result<Instruction, String>

Constructs an Instruction from it’s machine code representation.

Examples found in repository?
examples/simple.rs (line 9)
2fn main() {
3    // instruction can be assembled from strings
4    let instr: Instruction = assemble_line("addi t0, t1, 1024").unwrap().i();
5    // and disassembled
6    println!("assembled instruction: {}", instr);
7
8    // instructions can also be decoded from binary
9    let instr2 = Instruction::decode(0xe0058513).unwrap();
10
11    // and encoded
12    assert_eq!(Instruction::encode(&instr2), 0xe0058513);
13}
Source

pub fn encode(instruction: &Instruction) -> u32

Examples found in repository?
examples/simple.rs (line 12)
2fn main() {
3    // instruction can be assembled from strings
4    let instr: Instruction = assemble_line("addi t0, t1, 1024").unwrap().i();
5    // and disassembled
6    println!("assembled instruction: {}", instr);
7
8    // instructions can also be decoded from binary
9    let instr2 = Instruction::decode(0xe0058513).unwrap();
10
11    // and encoded
12    assert_eq!(Instruction::encode(&instr2), 0xe0058513);
13}

Trait Implementations§

Source§

impl Debug for Instruction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Instruction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Instruction

Source§

fn eq(&self, other: &Instruction) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Instruction

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.