wasm-core 0.2.15

Portable WebAssembly implementation
Documentation
use prelude::{Vec, String};

#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum Opcode {
    Drop,
    Select,

    GetLocal(u32),
    SetLocal(u32),
    TeeLocal(u32),
    GetGlobal(u32),
    SetGlobal(u32),

    CurrentMemory,
    GrowMemory,

    Nop,
    Unreachable,
    Return,
    Call(u32),
    CallIndirect(u32),

    I32Const(i32),

    // iunop
    I32Clz,
    I32Ctz,
    I32Popcnt,

    // ibinop
    I32Add,
    I32Sub,
    I32Mul,
    I32DivU,
    I32DivS,
    I32RemU,
    I32RemS,
    I32And,
    I32Or,
    I32Xor,
    I32Shl,
    I32ShrU,
    I32ShrS,
    I32Rotl,
    I32Rotr,

    // itestop
    I32Eqz,

    // irelop
    I32Eq,
    I32Ne,
    I32LtU,
    I32LtS,
    I32LeU,
    I32LeS,
    I32GtU,
    I32GtS,
    I32GeU,
    I32GeS,

    I32WrapI64,

    I32Load(Memarg),
    I32Store(Memarg),
    I32Load8U(Memarg),
    I32Load8S(Memarg),
    I32Load16U(Memarg),
    I32Load16S(Memarg),
    I32Store8(Memarg),
    I32Store16(Memarg),

    I64Const(i64),

    // iunop
    I64Clz,
    I64Ctz,
    I64Popcnt,

    // ibinop
    I64Add,
    I64Sub,
    I64Mul,
    I64DivU,
    I64DivS,
    I64RemU,
    I64RemS,
    I64And,
    I64Or,
    I64Xor,
    I64Shl,
    I64ShrU,
    I64ShrS,
    I64Rotl,
    I64Rotr,

    // itestop
    I64Eqz,

    // irelop
    I64Eq,
    I64Ne,
    I64LtU,
    I64LtS,
    I64LeU,
    I64LeS,
    I64GtU,
    I64GtS,
    I64GeU,
    I64GeS,

    I64ExtendI32U,
    I64ExtendI32S,

    I64Load(Memarg),
    I64Store(Memarg),
    I64Load8U(Memarg),
    I64Load8S(Memarg),
    I64Load16U(Memarg),
    I64Load16S(Memarg),
    I64Load32U(Memarg),
    I64Load32S(Memarg),
    I64Store8(Memarg),
    I64Store16(Memarg),
    I64Store32(Memarg),

    // Floating point
    F32Const(u32),
    F64Const(u64),
    F32ReinterpretI32,
    F64ReinterpretI64,
    I32ReinterpretF32,
    I64ReinterpretF64,
    I32TruncSF32,
    I32TruncUF32,
    I32TruncSF64,
    I32TruncUF64,
    I64TruncSF32,
    I64TruncUF32,
    I64TruncSF64,
    I64TruncUF64,
    F32ConvertSI32,
    F32ConvertUI32,
    F32ConvertSI64,
    F32ConvertUI64,
    F64ConvertSI32,
    F64ConvertUI32,
    F64ConvertSI64,
    F64ConvertUI64,
    F32DemoteF64,
    F64PromoteF32,
    F32Abs,
    F32Neg,
    F32Ceil,
    F32Floor,
    F32Trunc,
    F32Nearest,
    F32Sqrt,
    F32Add,
    F32Sub,
    F32Mul,
    F32Div,
    F32Min,
    F32Max,
    F32Copysign,
    F32Eq,
    F32Ne,
    F32Lt,
    F32Gt,
    F32Le,
    F32Ge,
    F64Abs,
    F64Neg,
    F64Ceil,
    F64Floor,
    F64Trunc,
    F64Nearest,
    F64Sqrt,
    F64Add,
    F64Sub,
    F64Mul,
    F64Div,
    F64Min,
    F64Max,
    F64Copysign,
    F64Eq,
    F64Ne,
    F64Lt,
    F64Gt,
    F64Le,
    F64Ge,

    // wasm-core specific opcodes here. Should be generated by front-end.
    Jmp(u32),
    JmpIf(u32),
    JmpEither(u32, u32),
    JmpTable(Vec<u32>, u32),

    NativeInvoke(u32),
    Memcpy, // Pops: (dest, src, n_bytes)

    NotImplemented(String)
}

#[derive(Copy, Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct Memarg {
    pub offset: u32,
    pub align: u32
}