Skip to main content

Instruction

Struct Instruction 

Source
pub struct Instruction {
    pub opcode: Opcode,
    /* private fields */
}
Expand description

A fully decoded bytecode instruction: an Opcode paired with its Operand list.

The number and types of operands are always determined by Opcode::operand_types.

Fields§

§opcode: Opcode

The operation to perform.

Implementations§

Source§

impl Instruction

Source

pub fn new( opcode: Opcode, operands: impl IntoIterator<Item = Operand>, ) -> StatorResult<Self>

Construct an instruction, verifying that the operand count matches the opcode’s declared operand list.

Returns an error if the wrong number of operands is supplied.

Source

pub fn new_unchecked( opcode: Opcode, operands: impl IntoIterator<Item = Operand>, ) -> Self

Construct an instruction without operand-count validation.

Prefer Instruction::new unless you are certain the operand count is correct (e.g. inside the decoder).

Source

pub fn operand_count(&self) -> usize

Return the number of operands carried by this instruction.

Source

pub fn operands(&self) -> &[Operand]

Return the live operand slice for this instruction.

Source

pub fn operand(&self, idx: usize) -> &Operand

Return the operand at idx.

Panics if idx is out of bounds for this instruction.

Source

pub fn operand_at(&self, idx: usize) -> Option<&Operand>

Return the operand at idx, if present.

Source

pub fn operand_mut(&mut self, idx: usize) -> &mut Operand

Return the operand at idx mutably.

Panics if idx is out of bounds for this instruction.

Source

pub unsafe fn operand_unchecked(&self, idx: usize) -> &Operand

Return the operand at idx without bounds checks.

§Safety

idx must be less than Instruction::operand_count.

Source

pub fn reg(&self, idx: usize) -> u32

Return operand idx as a register index.

Source

pub fn register_count(&self, idx: usize) -> u32

Return operand idx as a register-count operand.

Source

pub fn immediate(&self, idx: usize) -> i32

Return operand idx as an immediate value.

Source

pub fn constant_pool_idx(&self, idx: usize) -> u32

Return operand idx as a constant-pool index.

Source

pub fn feedback_slot(&self, idx: usize) -> u32

Return operand idx as a feedback-slot index.

Source

pub fn runtime_id(&self, idx: usize) -> u32

Return operand idx as a runtime identifier.

Source

pub fn jump_offset(&self, idx: usize) -> i32

Return operand idx as a jump offset.

Source

pub fn flag(&self, idx: usize) -> u8

Return operand idx as a flag value.

Trait Implementations§

Source§

impl Clone for Instruction

Source§

fn clone(&self) -> Instruction

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Instruction

Source§

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

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 (const: unstable) · 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 Eq for Instruction

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> 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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V