pub(crate) struct InstructionFormat {
    pub name: &'static str,
    pub num_value_operands: usize,
    pub has_value_list: bool,
    pub imm_fields: Vec<FormatField>,
    pub num_block_operands: usize,
    pub typevar_operand: Option<usize>,
}
Expand description

Every instruction opcode has a corresponding instruction format which determines the number of operands and their kinds. Instruction formats are identified structurally, i.e., the format of an instruction is derived from the kinds of operands used in its declaration.

The instruction format stores two separate lists of operands: Immediates and values. Immediate operands (including entity references) are represented as explicit members in the InstructionData variants. The value operands are stored differently, depending on how many there are. Beyond a certain point, instruction formats switch to an external value list for storing value arguments. Value lists can hold an arbitrary number of values.

All instruction formats must be predefined in the meta shared/formats.rs module.

Fields§

§name: &'static str

Instruction format name in CamelCase. This is used as a Rust variant name in both the InstructionData and InstructionFormat enums.

§num_value_operands: usize§has_value_list: bool§imm_fields: Vec<FormatField>§num_block_operands: usize§typevar_operand: Option<usize>

Index of the value input operand that is used to infer the controlling type variable. By default, this is 0, the first value operand. The index is relative to the values only, ignoring immediate operands.

Implementations§

source§

impl InstructionFormat

source

pub fn structure(&self) -> FormatStructure

Returns a tuple that uniquely identifies the structure.

Trait Implementations§

source§

impl Debug for InstructionFormat

source§

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

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

impl Display for InstructionFormat

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

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

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

§

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 Twhere U: TryFrom<T>,

§

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.