Skip to main content

Inst

Enum Inst 

Source
pub enum Inst {
Show 111 variants Lb { rd: u8, rs1: u8, imm: i32, }, Lh { rd: u8, rs1: u8, imm: i32, }, Lw { rd: u8, rs1: u8, imm: i32, }, Ld { rd: u8, rs1: u8, imm: i32, }, Lbu { rd: u8, rs1: u8, imm: i32, }, Lhu { rd: u8, rs1: u8, imm: i32, }, Lwu { rd: u8, rs1: u8, imm: i32, }, Sb { rs1: u8, rs2: u8, imm: i32, }, Sh { rs1: u8, rs2: u8, imm: i32, }, Sw { rs1: u8, rs2: u8, imm: i32, }, Sd { rs1: u8, rs2: u8, imm: i32, }, Addi { rd: u8, rs1: u8, imm: i32, }, Slti { rd: u8, rs1: u8, imm: i32, }, Sltiu { rd: u8, rs1: u8, imm: i32, }, Andi { rd: u8, rs1: u8, imm: i32, }, Ori { rd: u8, rs1: u8, imm: i32, }, Xori { rd: u8, rs1: u8, imm: i32, }, Slli { rd: u8, rs1: u8, shamt: u8, }, Srli { rd: u8, rs1: u8, shamt: u8, }, Srai { rd: u8, rs1: u8, shamt: u8, }, Addiw { rd: u8, rs1: u8, imm: i32, }, Slliw { rd: u8, rs1: u8, shamt: u8, }, Srliw { rd: u8, rs1: u8, shamt: u8, }, Sraiw { rd: u8, rs1: u8, shamt: u8, }, Add { rd: u8, rs1: u8, rs2: u8, }, Sub { rd: u8, rs1: u8, rs2: u8, }, Sll { rd: u8, rs1: u8, rs2: u8, }, Srl { rd: u8, rs1: u8, rs2: u8, }, Sra { rd: u8, rs1: u8, rs2: u8, }, Slt { rd: u8, rs1: u8, rs2: u8, }, Sltu { rd: u8, rs1: u8, rs2: u8, }, Xor { rd: u8, rs1: u8, rs2: u8, }, Or { rd: u8, rs1: u8, rs2: u8, }, And { rd: u8, rs1: u8, rs2: u8, }, Addw { rd: u8, rs1: u8, rs2: u8, }, Subw { rd: u8, rs1: u8, rs2: u8, }, Sllw { rd: u8, rs1: u8, rs2: u8, }, Srlw { rd: u8, rs1: u8, rs2: u8, }, Sraw { rd: u8, rs1: u8, rs2: u8, }, Mul { rd: u8, rs1: u8, rs2: u8, }, Mulh { rd: u8, rs1: u8, rs2: u8, }, Mulhsu { rd: u8, rs1: u8, rs2: u8, }, Mulhu { rd: u8, rs1: u8, rs2: u8, }, Div { rd: u8, rs1: u8, rs2: u8, }, Divu { rd: u8, rs1: u8, rs2: u8, }, Rem { rd: u8, rs1: u8, rs2: u8, }, Remu { rd: u8, rs1: u8, rs2: u8, }, Mulw { rd: u8, rs1: u8, rs2: u8, }, Divw { rd: u8, rs1: u8, rs2: u8, }, Divuw { rd: u8, rs1: u8, rs2: u8, }, Remw { rd: u8, rs1: u8, rs2: u8, }, Remuw { rd: u8, rs1: u8, rs2: u8, }, Clz { rd: u8, rs1: u8, }, Clzw { rd: u8, rs1: u8, }, Ctz { rd: u8, rs1: u8, }, Ctzw { rd: u8, rs1: u8, }, Cpop { rd: u8, rs1: u8, }, Cpopw { rd: u8, rs1: u8, }, SextB { rd: u8, rs1: u8, }, SextH { rd: u8, rs1: u8, }, ZextH { rd: u8, rs1: u8, }, Rev8 { rd: u8, rs1: u8, }, OrcB { rd: u8, rs1: u8, }, Min { rd: u8, rs1: u8, rs2: u8, }, Minu { rd: u8, rs1: u8, rs2: u8, }, Max { rd: u8, rs1: u8, rs2: u8, }, Maxu { rd: u8, rs1: u8, rs2: u8, }, Andn { rd: u8, rs1: u8, rs2: u8, }, Orn { rd: u8, rs1: u8, rs2: u8, }, Xnor { rd: u8, rs1: u8, rs2: u8, }, Rol { rd: u8, rs1: u8, rs2: u8, }, Ror { rd: u8, rs1: u8, rs2: u8, }, Rolw { rd: u8, rs1: u8, rs2: u8, }, Rorw { rd: u8, rs1: u8, rs2: u8, }, Rori { rd: u8, rs1: u8, shamt: u8, }, Roriw { rd: u8, rs1: u8, shamt: u8, }, Sh1add { rd: u8, rs1: u8, rs2: u8, }, Sh2add { rd: u8, rs1: u8, rs2: u8, }, Sh3add { rd: u8, rs1: u8, rs2: u8, }, Sh1adduw { rd: u8, rs1: u8, rs2: u8, }, Sh2adduw { rd: u8, rs1: u8, rs2: u8, }, Sh3adduw { rd: u8, rs1: u8, rs2: u8, }, Adduw { rd: u8, rs1: u8, rs2: u8, }, Slliuw { rd: u8, rs1: u8, shamt: u8, }, Bclr { rd: u8, rs1: u8, rs2: u8, }, Bset { rd: u8, rs1: u8, rs2: u8, }, Binv { rd: u8, rs1: u8, rs2: u8, }, Bext { rd: u8, rs1: u8, rs2: u8, }, Bclri { rd: u8, rs1: u8, shamt: u8, }, Bseti { rd: u8, rs1: u8, shamt: u8, }, Binvi { rd: u8, rs1: u8, shamt: u8, }, Bexti { rd: u8, rs1: u8, shamt: u8, }, CzeroEqz { rd: u8, rs1: u8, rs2: u8, }, CzeroNez { rd: u8, rs1: u8, rs2: u8, }, Lui { rd: u8, imm: i32, }, Auipc { rd: u8, imm: i32, }, Jal { rd: u8, imm: i32, }, Jalr { rd: u8, rs1: u8, imm: i32, }, Beq { rs1: u8, rs2: u8, imm: i32, }, Bne { rs1: u8, rs2: u8, imm: i32, }, Blt { rs1: u8, rs2: u8, imm: i32, }, Bge { rs1: u8, rs2: u8, imm: i32, }, Bltu { rs1: u8, rs2: u8, imm: i32, }, Bgeu { rs1: u8, rs2: u8, imm: i32, }, Fence, FenceI, Trap, EcallJar, Ecalli { imm: i32, }, Fallthrough, Reserved { raw: u32, },
}
Expand description

Decoded RV instruction in named-variant form.

One variant per RV operation we accept. Field layout is per the RV unprivileged spec. Immediate fields are pre-sign-extended to i32.

Variants§

§

Lb

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Lh

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Lw

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Ld

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Lbu

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Lhu

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Lwu

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Sb

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Sh

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Sw

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Sd

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Addi

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Slti

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Sltiu

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Andi

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Ori

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Xori

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Slli

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Srli

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Srai

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Addiw

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Slliw

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Srliw

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Sraiw

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Add

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sub

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sll

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Srl

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sra

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Slt

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sltu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Xor

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Or

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

And

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Addw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Subw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sllw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Srlw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sraw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Mul

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Mulh

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Mulhsu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Mulhu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Div

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Divu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Rem

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Remu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Mulw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Divw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Divuw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Remw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Remuw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Clz

Fields

§rd: u8
§rs1: u8
§

Clzw

Fields

§rd: u8
§rs1: u8
§

Ctz

Fields

§rd: u8
§rs1: u8
§

Ctzw

Fields

§rd: u8
§rs1: u8
§

Cpop

Fields

§rd: u8
§rs1: u8
§

Cpopw

Fields

§rd: u8
§rs1: u8
§

SextB

Fields

§rd: u8
§rs1: u8
§

SextH

Fields

§rd: u8
§rs1: u8
§

ZextH

Fields

§rd: u8
§rs1: u8
§

Rev8

Fields

§rd: u8
§rs1: u8
§

OrcB

Fields

§rd: u8
§rs1: u8
§

Min

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Minu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Max

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Maxu

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Andn

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Orn

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Xnor

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Rol

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Ror

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Rolw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Rorw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Rori

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Roriw

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Sh1add

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sh2add

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sh3add

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sh1adduw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sh2adduw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Sh3adduw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Adduw

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Slliuw

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Bclr

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Bset

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Binv

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Bext

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Bclri

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Bseti

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Binvi

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

Bexti

Fields

§rd: u8
§rs1: u8
§shamt: u8
§

CzeroEqz

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

CzeroNez

Fields

§rd: u8
§rs1: u8
§rs2: u8
§

Lui

Fields

§rd: u8
§imm: i32
§

Auipc

auipc rd, immrd = pc + (imm << 12). With code mapped at CODE_BASE, pc is the guest VA, so the recompiler folds this to a compile-time constant. imm holds the already-shifted upper-20 value (same shape as Lui).

Fields

§rd: u8
§imm: i32
§

Jal

jal rd, offrd = pc + sizeof(jal); pc = pc + off. Used for static jumps (rd = x0, = c.j) and direct calls (rd = ra, saving the return address natively).

Fields

§rd: u8
§imm: i32
§

Jalr

jalr rd, rs1, immrd = pc + sizeof; target_va = (rs1 + imm) & 0xFFFF_FFFF (32-bit wrap). The runtime validates the target is a basic-block start (else Panic) and dispatches. Used for returns (jalr x0, ra, 0) and indirect calls.

Fields

§rd: u8
§rs1: u8
§imm: i32
§

Beq

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Bne

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Blt

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Bge

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Bltu

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Bgeu

Fields

§rs1: u8
§rs2: u8
§imm: i32
§

Fence

fence — decoded but treated as no-op (PVM2 is single-threaded).

§

FenceI

fence.i — same.

§

Trap

custom-0 funct3=000: unconditional execution abort.

§

EcallJar

custom-0 funct3=001: jar management op / dynamic CALL.

§

Ecalli

custom-0 funct3=010: host-call with 20-bit signed immediate.

Fields

§imm: i32
§

Fallthrough

custom-0 funct3=100: terminator no-op. Acts as a basic-block start at the next byte. Linker injects this before branch / call targets that aren’t naturally post-terminator.

§

Reserved

Decoder accepted the wire bits but the encoding is reserved by PVM2 (AUIPC, standard ECALL/EBREAK, CSR, atomics, FP, …). Programs containing this are rejected at deblob.

Fields

§raw: u32

Implementations§

Source§

impl Inst

Source

pub fn uses_reserved_reg(&self) -> bool

True iff this instruction names a reserved register in any of its register fields. The valid PVM2 registers are x0, x1..x15 (RV64E’s full file, including x3/x4); reserved are only x16..x31, which do not exist in RV64E — a 16-register base — so naming one is an illegal, standard-RV encoding. Such an instruction decodes as Reserved and panics if executed (lazy). Immediate bits that happen to alias a reserved register are not registers and are ignored — each variant binds exactly its real register fields. This match is the single source of truth both consensus engines route through (the interpreter via decode, the recompiler via word_uses_reserved_reg); the lack of a wildcard arm means a future Inst variant won’t compile until classified.

Trait Implementations§

Source§

impl Clone for Inst

Source§

fn clone(&self) -> Inst

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Inst

Source§

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

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

impl PartialEq for Inst

Source§

fn eq(&self, other: &Inst) -> 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 Copy for Inst

Source§

impl Eq for Inst

Source§

impl StructuralPartialEq for Inst

Auto Trait Implementations§

§

impl Freeze for Inst

§

impl RefUnwindSafe for Inst

§

impl Send for Inst

§

impl Sync for Inst

§

impl Unpin for Inst

§

impl UnsafeUnpin for Inst

§

impl UnwindSafe for Inst

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.