pub enum Instruction {
Show 236 variants
LocalCopy32(LocalAddr, LocalAddr),
LocalCopy64(LocalAddr, LocalAddr),
LocalCopy128(LocalAddr, LocalAddr),
LocalCopy128Ref(LocalAddr, LocalAddr),
LocalCopyRef(LocalAddr, LocalAddr),
LocalsStore32(LocalAddr, LocalAddr, u32, MemAddr),
LocalsStore64(LocalAddr, LocalAddr, u32, MemAddr),
LocalsStore128(LocalAddr, LocalAddr, u32, MemAddr),
LocalsStoreRef(LocalAddr, LocalAddr, u32, MemAddr),
Unreachable,
Nop,
Block(u32),
BlockWithType(ValType, u32),
BlockWithFuncType(TypeAddr, u32),
Loop(u32),
LoopWithType(ValType, u32),
LoopWithFuncType(TypeAddr, u32),
If(u32, u32),
IfWithType(ValType, u32, u32),
IfWithFuncType(TypeAddr, u32, u32),
Else(u32),
EndBlockFrame,
Br(LabelAddr),
BrIf(LabelAddr),
BrTable(u32, u32),
BrLabel(LabelAddr),
Return,
Call(FuncAddr),
CallIndirect(TypeAddr, TableAddr),
ReturnCall(FuncAddr),
ReturnCallIndirect(TypeAddr, TableAddr),
Drop32,
Drop64,
Drop128,
DropRef,
Select32,
Select64,
Select128,
SelectRef,
LocalGet32(LocalAddr),
LocalGet64(LocalAddr),
LocalGet128(LocalAddr),
LocalGetRef(LocalAddr),
LocalSet32(LocalAddr),
LocalSet64(LocalAddr),
LocalSet128(LocalAddr),
LocalSetRef(LocalAddr),
LocalTee32(LocalAddr),
LocalTee64(LocalAddr),
LocalTee128(LocalAddr),
LocalTeeRef(LocalAddr),
GlobalGet(GlobalAddr),
GlobalSet32(GlobalAddr),
GlobalSet64(GlobalAddr),
GlobalSet128(GlobalAddr),
GlobalSetRef(GlobalAddr),
I32Load {
offset: u64,
mem_addr: MemAddr,
},
I64Load {
offset: u64,
mem_addr: MemAddr,
},
F32Load {
offset: u64,
mem_addr: MemAddr,
},
F64Load {
offset: u64,
mem_addr: MemAddr,
},
I32Load8S {
offset: u64,
mem_addr: MemAddr,
},
I32Load8U {
offset: u64,
mem_addr: MemAddr,
},
I32Load16S {
offset: u64,
mem_addr: MemAddr,
},
I32Load16U {
offset: u64,
mem_addr: MemAddr,
},
I64Load8S {
offset: u64,
mem_addr: MemAddr,
},
I64Load8U {
offset: u64,
mem_addr: MemAddr,
},
I64Load16S {
offset: u64,
mem_addr: MemAddr,
},
I64Load16U {
offset: u64,
mem_addr: MemAddr,
},
I64Load32S {
offset: u64,
mem_addr: MemAddr,
},
I64Load32U {
offset: u64,
mem_addr: MemAddr,
},
I32Store {
offset: u64,
mem_addr: MemAddr,
},
I64Store {
offset: u64,
mem_addr: MemAddr,
},
F32Store {
offset: u64,
mem_addr: MemAddr,
},
F64Store {
offset: u64,
mem_addr: MemAddr,
},
I32Store8 {
offset: u64,
mem_addr: MemAddr,
},
I32Store16 {
offset: u64,
mem_addr: MemAddr,
},
I64Store8 {
offset: u64,
mem_addr: MemAddr,
},
I64Store16 {
offset: u64,
mem_addr: MemAddr,
},
I64Store32 {
offset: u64,
mem_addr: MemAddr,
},
MemorySize(MemAddr),
MemoryGrow(MemAddr),
I32Const(i32),
I64Const(i64),
F32Const(f32),
F64Const(f64),
RefNull(ValType),
RefFunc(FuncAddr),
RefIsNull,
I32Eqz,
I32Eq,
I32Ne,
I32LtS,
I32LtU,
I32GtS,
I32GtU,
I32LeS,
I32LeU,
I32GeS,
I32GeU,
I64Eqz,
I64Eq,
I64Ne,
I64LtS,
I64LtU,
I64GtS,
I64GtU,
I64LeS,
I64LeU,
I64GeS,
I64GeU,
F32Eq,
F32Ne,
F32Lt,
F32Gt,
F32Le,
F32Ge,
F64Eq,
F64Ne,
F64Lt,
F64Gt,
F64Le,
F64Ge,
I32Clz,
I32Ctz,
I32Popcnt,
I32Add,
I32Sub,
I32Mul,
I32DivS,
I32DivU,
I32RemS,
I32RemU,
I64Clz,
I64Ctz,
I64Popcnt,
I64Add,
I64Sub,
I64Mul,
I64DivS,
I64DivU,
I64RemS,
I64RemU,
I32And,
I32Or,
I32Xor,
I32Shl,
I32ShrS,
I32ShrU,
I32Rotl,
I32Rotr,
I64And,
I64Or,
I64Xor,
I64Shl,
I64ShrS,
I64ShrU,
I64Rotl,
I64Rotr,
F32Abs,
F32Neg,
F32Ceil,
F32Floor,
F32Trunc,
F32Nearest,
F32Sqrt,
F32Add,
F32Sub,
F32Mul,
F32Div,
F32Min,
F32Max,
F32Copysign,
F64Abs,
F64Neg,
F64Ceil,
F64Floor,
F64Trunc,
F64Nearest,
F64Sqrt,
F64Add,
F64Sub,
F64Mul,
F64Div,
F64Min,
F64Max,
F64Copysign,
I32WrapI64,
I32TruncF32S,
I32TruncF32U,
I32TruncF64S,
I32TruncF64U,
I32Extend8S,
I32Extend16S,
I64Extend8S,
I64Extend16S,
I64Extend32S,
I64ExtendI32S,
I64ExtendI32U,
I64TruncF32S,
I64TruncF32U,
I64TruncF64S,
I64TruncF64U,
F32ConvertI32S,
F32ConvertI32U,
F32ConvertI64S,
F32ConvertI64U,
F32DemoteF64,
F64ConvertI32S,
F64ConvertI32U,
F64ConvertI64S,
F64ConvertI64U,
F64PromoteF32,
I32ReinterpretF32,
I64ReinterpretF64,
F32ReinterpretI32,
F64ReinterpretI64,
I32TruncSatF32S,
I32TruncSatF32U,
I32TruncSatF64S,
I32TruncSatF64U,
I64TruncSatF32S,
I64TruncSatF32U,
I64TruncSatF64S,
I64TruncSatF64U,
TableInit(ElemAddr, TableAddr),
TableGet(TableAddr),
TableSet(TableAddr),
TableCopy {
from: TableAddr,
to: TableAddr,
},
TableGrow(TableAddr),
TableSize(TableAddr),
TableFill(TableAddr),
MemoryInit(MemAddr, DataAddr),
MemoryCopy(MemAddr, MemAddr),
MemoryFill(MemAddr),
DataDrop(DataAddr),
ElemDrop(ElemAddr),
}
Expand description
A WebAssembly Instruction
These are our own internal bytecode instructions so they may not match the spec exactly. Wasm Bytecode can map to multiple of these instructions.
§Differences to the spec
br_table
stores the jump labels in the followingbr_label
instructions to keep this enum small.- Lables/Blocks: we store the label end offset in the instruction itself and use
EndBlockFrame
to mark the end of a block. This makes it easier to implement the label stack iteratively.
See https://webassembly.github.io/spec/core/binary/instructions.html
Variants§
LocalCopy32(LocalAddr, LocalAddr)
LocalCopy64(LocalAddr, LocalAddr)
LocalCopy128(LocalAddr, LocalAddr)
LocalCopy128Ref(LocalAddr, LocalAddr)
LocalCopyRef(LocalAddr, LocalAddr)
LocalsStore32(LocalAddr, LocalAddr, u32, MemAddr)
LocalsStore64(LocalAddr, LocalAddr, u32, MemAddr)
LocalsStore128(LocalAddr, LocalAddr, u32, MemAddr)
LocalsStoreRef(LocalAddr, LocalAddr, u32, MemAddr)
Unreachable
Nop
Block(u32)
BlockWithType(ValType, u32)
BlockWithFuncType(TypeAddr, u32)
Loop(u32)
LoopWithType(ValType, u32)
LoopWithFuncType(TypeAddr, u32)
If(u32, u32)
IfWithType(ValType, u32, u32)
IfWithFuncType(TypeAddr, u32, u32)
Else(u32)
EndBlockFrame
Br(LabelAddr)
BrIf(LabelAddr)
BrTable(u32, u32)
BrLabel(LabelAddr)
Return
Call(FuncAddr)
CallIndirect(TypeAddr, TableAddr)
ReturnCall(FuncAddr)
ReturnCallIndirect(TypeAddr, TableAddr)
Drop32
Drop64
Drop128
DropRef
Select32
Select64
Select128
SelectRef
LocalGet32(LocalAddr)
LocalGet64(LocalAddr)
LocalGet128(LocalAddr)
LocalGetRef(LocalAddr)
LocalSet32(LocalAddr)
LocalSet64(LocalAddr)
LocalSet128(LocalAddr)
LocalSetRef(LocalAddr)
LocalTee32(LocalAddr)
LocalTee64(LocalAddr)
LocalTee128(LocalAddr)
LocalTeeRef(LocalAddr)
GlobalGet(GlobalAddr)
GlobalSet32(GlobalAddr)
GlobalSet64(GlobalAddr)
GlobalSet128(GlobalAddr)
GlobalSetRef(GlobalAddr)
I32Load
I64Load
F32Load
F64Load
I32Load8S
I32Load8U
I32Load16S
I32Load16U
I64Load8S
I64Load8U
I64Load16S
I64Load16U
I64Load32S
I64Load32U
I32Store
I64Store
F32Store
F64Store
I32Store8
I32Store16
I64Store8
I64Store16
I64Store32
MemorySize(MemAddr)
MemoryGrow(MemAddr)
I32Const(i32)
I64Const(i64)
F32Const(f32)
F64Const(f64)
RefNull(ValType)
RefFunc(FuncAddr)
RefIsNull
I32Eqz
I32Eq
I32Ne
I32LtS
I32LtU
I32GtS
I32GtU
I32LeS
I32LeU
I32GeS
I32GeU
I64Eqz
I64Eq
I64Ne
I64LtS
I64LtU
I64GtS
I64GtU
I64LeS
I64LeU
I64GeS
I64GeU
F32Eq
F32Ne
F32Lt
F32Gt
F32Le
F32Ge
F64Eq
F64Ne
F64Lt
F64Gt
F64Le
F64Ge
I32Clz
I32Ctz
I32Popcnt
I32Add
I32Sub
I32Mul
I32DivS
I32DivU
I32RemS
I32RemU
I64Clz
I64Ctz
I64Popcnt
I64Add
I64Sub
I64Mul
I64DivS
I64DivU
I64RemS
I64RemU
I32And
I32Or
I32Xor
I32Shl
I32ShrS
I32ShrU
I32Rotl
I32Rotr
I64And
I64Or
I64Xor
I64Shl
I64ShrS
I64ShrU
I64Rotl
I64Rotr
F32Abs
F32Neg
F32Ceil
F32Floor
F32Trunc
F32Nearest
F32Sqrt
F32Add
F32Sub
F32Mul
F32Div
F32Min
F32Max
F32Copysign
F64Abs
F64Neg
F64Ceil
F64Floor
F64Trunc
F64Nearest
F64Sqrt
F64Add
F64Sub
F64Mul
F64Div
F64Min
F64Max
F64Copysign
I32WrapI64
I32TruncF32S
I32TruncF32U
I32TruncF64S
I32TruncF64U
I32Extend8S
I32Extend16S
I64Extend8S
I64Extend16S
I64Extend32S
I64ExtendI32S
I64ExtendI32U
I64TruncF32S
I64TruncF32U
I64TruncF64S
I64TruncF64U
F32ConvertI32S
F32ConvertI32U
F32ConvertI64S
F32ConvertI64U
F32DemoteF64
F64ConvertI32S
F64ConvertI32U
F64ConvertI64S
F64ConvertI64U
F64PromoteF32
I32ReinterpretF32
I64ReinterpretF64
F32ReinterpretI32
F64ReinterpretI64
I32TruncSatF32S
I32TruncSatF32U
I32TruncSatF64S
I32TruncSatF64U
I64TruncSatF32S
I64TruncSatF32U
I64TruncSatF64S
I64TruncSatF64U
TableInit(ElemAddr, TableAddr)
TableGet(TableAddr)
TableSet(TableAddr)
TableCopy
TableGrow(TableAddr)
TableSize(TableAddr)
TableFill(TableAddr)
MemoryInit(MemAddr, DataAddr)
MemoryCopy(MemAddr, MemAddr)
MemoryFill(MemAddr)
DataDrop(DataAddr)
ElemDrop(ElemAddr)
Trait Implementations§
Source§impl Archive for Instruction
impl Archive for Instruction
Source§type Archived = ArchivedInstruction
type Archived = ArchivedInstruction
The archived representation of this type. Read more
Source§type Resolver = InstructionResolver
type Resolver = InstructionResolver
The resolver for this type. It must contain all the additional information from serializing
needed to make the archived type from the normal type.
Source§impl Clone for Instruction
impl Clone for Instruction
Source§fn clone(&self) -> Instruction
fn clone(&self) -> Instruction
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for Instruction
impl Debug for Instruction
Source§impl<__D: Fallible + ?Sized> Deserialize<Instruction, __D> for Archived<Instruction>where
LocalAddr: Archive,
Archived<LocalAddr>: Deserialize<LocalAddr, __D>,
u32: Archive,
Archived<u32>: Deserialize<u32, __D>,
MemAddr: Archive,
Archived<MemAddr>: Deserialize<MemAddr, __D>,
ValType: Archive,
Archived<ValType>: Deserialize<ValType, __D>,
TypeAddr: Archive,
Archived<TypeAddr>: Deserialize<TypeAddr, __D>,
LabelAddr: Archive,
Archived<LabelAddr>: Deserialize<LabelAddr, __D>,
FuncAddr: Archive,
Archived<FuncAddr>: Deserialize<FuncAddr, __D>,
TableAddr: Archive,
Archived<TableAddr>: Deserialize<TableAddr, __D>,
GlobalAddr: Archive,
Archived<GlobalAddr>: Deserialize<GlobalAddr, __D>,
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
i32: Archive,
Archived<i32>: Deserialize<i32, __D>,
i64: Archive,
Archived<i64>: Deserialize<i64, __D>,
f32: Archive,
Archived<f32>: Deserialize<f32, __D>,
f64: Archive,
Archived<f64>: Deserialize<f64, __D>,
ElemAddr: Archive,
Archived<ElemAddr>: Deserialize<ElemAddr, __D>,
DataAddr: Archive,
Archived<DataAddr>: Deserialize<DataAddr, __D>,
impl<__D: Fallible + ?Sized> Deserialize<Instruction, __D> for Archived<Instruction>where
LocalAddr: Archive,
Archived<LocalAddr>: Deserialize<LocalAddr, __D>,
u32: Archive,
Archived<u32>: Deserialize<u32, __D>,
MemAddr: Archive,
Archived<MemAddr>: Deserialize<MemAddr, __D>,
ValType: Archive,
Archived<ValType>: Deserialize<ValType, __D>,
TypeAddr: Archive,
Archived<TypeAddr>: Deserialize<TypeAddr, __D>,
LabelAddr: Archive,
Archived<LabelAddr>: Deserialize<LabelAddr, __D>,
FuncAddr: Archive,
Archived<FuncAddr>: Deserialize<FuncAddr, __D>,
TableAddr: Archive,
Archived<TableAddr>: Deserialize<TableAddr, __D>,
GlobalAddr: Archive,
Archived<GlobalAddr>: Deserialize<GlobalAddr, __D>,
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
i32: Archive,
Archived<i32>: Deserialize<i32, __D>,
i64: Archive,
Archived<i64>: Deserialize<i64, __D>,
f32: Archive,
Archived<f32>: Deserialize<f32, __D>,
f64: Archive,
Archived<f64>: Deserialize<f64, __D>,
ElemAddr: Archive,
Archived<ElemAddr>: Deserialize<ElemAddr, __D>,
DataAddr: Archive,
Archived<DataAddr>: Deserialize<DataAddr, __D>,
Source§fn deserialize(&self, deserializer: &mut __D) -> Result<Instruction, __D::Error>
fn deserialize(&self, deserializer: &mut __D) -> Result<Instruction, __D::Error>
Deserializes using the given deserializer
Source§impl PartialEq for Instruction
impl PartialEq for Instruction
Source§impl<__S: Fallible + ?Sized> Serialize<__S> for Instructionwhere
LocalAddr: Serialize<__S>,
u32: Serialize<__S>,
MemAddr: Serialize<__S>,
ValType: Serialize<__S>,
TypeAddr: Serialize<__S>,
LabelAddr: Serialize<__S>,
FuncAddr: Serialize<__S>,
TableAddr: Serialize<__S>,
GlobalAddr: Serialize<__S>,
u64: Serialize<__S>,
i32: Serialize<__S>,
i64: Serialize<__S>,
f32: Serialize<__S>,
f64: Serialize<__S>,
ElemAddr: Serialize<__S>,
DataAddr: Serialize<__S>,
impl<__S: Fallible + ?Sized> Serialize<__S> for Instructionwhere
LocalAddr: Serialize<__S>,
u32: Serialize<__S>,
MemAddr: Serialize<__S>,
ValType: Serialize<__S>,
TypeAddr: Serialize<__S>,
LabelAddr: Serialize<__S>,
FuncAddr: Serialize<__S>,
TableAddr: Serialize<__S>,
GlobalAddr: Serialize<__S>,
u64: Serialize<__S>,
i32: Serialize<__S>,
i64: Serialize<__S>,
f32: Serialize<__S>,
f64: Serialize<__S>,
ElemAddr: Serialize<__S>,
DataAddr: Serialize<__S>,
impl StructuralPartialEq for Instruction
Auto Trait Implementations§
impl Freeze for Instruction
impl RefUnwindSafe for Instruction
impl Send for Instruction
impl Sync for Instruction
impl Unpin for Instruction
impl UnwindSafe for Instruction
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
The archived counterpart of this type. Unlike
Archive
, it may be unsized. Read moreSource§type MetadataResolver = ()
type MetadataResolver = ()
The resolver for the metadata of this type. Read more
Source§unsafe fn resolve_metadata(
&self,
_: usize,
_: <T as ArchiveUnsized>::MetadataResolver,
_: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata,
)
unsafe fn resolve_metadata( &self, _: usize, _: <T as ArchiveUnsized>::MetadataResolver, _: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata, )
Creates the archived version of the metadata for this value at the given position and writes
it to the given output. Read more
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Gets the layout of the type.