summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wasmparser/src/primitives.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/wasmparser/src/primitives.rs')
-rw-r--r--third_party/rust/wasmparser/src/primitives.rs809
1 files changed, 809 insertions, 0 deletions
diff --git a/third_party/rust/wasmparser/src/primitives.rs b/third_party/rust/wasmparser/src/primitives.rs
new file mode 100644
index 0000000000..4c64b28260
--- /dev/null
+++ b/third_party/rust/wasmparser/src/primitives.rs
@@ -0,0 +1,809 @@
+/* Copyright 2018 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+use std::error::Error;
+use std::fmt;
+use std::result;
+
+#[derive(Debug, Clone)]
+pub struct BinaryReaderError {
+ // Wrap the actual error data in a `Box` so that the error is just one
+ // word. This means that we can continue returning small `Result`s in
+ // registers.
+ pub(crate) inner: Box<BinaryReaderErrorInner>,
+}
+
+#[derive(Debug, Clone)]
+pub(crate) struct BinaryReaderErrorInner {
+ pub(crate) message: String,
+ pub(crate) offset: usize,
+ pub(crate) needed_hint: Option<usize>,
+}
+
+pub type Result<T, E = BinaryReaderError> = result::Result<T, E>;
+
+impl Error for BinaryReaderError {}
+
+impl fmt::Display for BinaryReaderError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(
+ f,
+ "{} (at offset {})",
+ self.inner.message, self.inner.offset
+ )
+ }
+}
+
+impl BinaryReaderError {
+ pub(crate) fn new(message: impl Into<String>, offset: usize) -> Self {
+ let message = message.into();
+ BinaryReaderError {
+ inner: Box::new(BinaryReaderErrorInner {
+ message,
+ offset,
+ needed_hint: None,
+ }),
+ }
+ }
+
+ pub(crate) fn eof(offset: usize, needed_hint: usize) -> Self {
+ BinaryReaderError {
+ inner: Box::new(BinaryReaderErrorInner {
+ message: "Unexpected EOF".to_string(),
+ offset,
+ needed_hint: Some(needed_hint),
+ }),
+ }
+ }
+
+ /// Get this error's message.
+ pub fn message(&self) -> &str {
+ &self.inner.message
+ }
+
+ /// Get the offset within the Wasm binary where the error occured.
+ pub fn offset(&self) -> usize {
+ self.inner.offset
+ }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
+pub enum CustomSectionKind {
+ Unknown,
+ Name,
+ Producers,
+ SourceMappingURL,
+ Reloc,
+ Linking,
+}
+
+/// Section code as defined [here].
+///
+/// [here]: https://webassembly.github.io/spec/core/binary/modules.html#sections
+#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
+pub enum SectionCode<'a> {
+ Custom {
+ name: &'a str,
+ kind: CustomSectionKind,
+ },
+ Type, // Function signature declarations
+ Alias, // Aliased indices from nested/parent modules
+ Import, // Import declarations
+ Module, // Module declarations
+ Instance, // Instance definitions
+ Function, // Function declarations
+ Table, // Indirect function table and other tables
+ Memory, // Memory attributes
+ Global, // Global declarations
+ Export, // Exports
+ Start, // Start function declaration
+ Element, // Elements section
+ ModuleCode, // Module definitions
+ Code, // Function bodies (code)
+ Data, // Data segments
+ DataCount, // Count of passive data segments
+}
+
+/// Types as defined [here].
+///
+/// [here]: https://webassembly.github.io/spec/core/syntax/types.html#types
+#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+pub enum Type {
+ I32,
+ I64,
+ F32,
+ F64,
+ V128,
+ FuncRef,
+ ExternRef,
+ Func,
+ EmptyBlockType,
+}
+
+/// Either a value type or a function type.
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum TypeOrFuncType {
+ /// A value type.
+ ///
+ /// When used as the type for a block, this type is the optional result
+ /// type: `[] -> [t?]`.
+ Type(Type),
+
+ /// A function type (referenced as an index into the types section).
+ FuncType(u32),
+}
+
+/// External types as defined [here].
+///
+/// [here]: https://webassembly.github.io/spec/core/syntax/types.html#external-types
+#[derive(Debug, Copy, Clone)]
+pub enum ExternalKind {
+ Function,
+ Table,
+ Memory,
+ Global,
+ Type,
+ Module,
+ Instance,
+}
+
+#[derive(Debug, Clone)]
+pub enum TypeDef<'a> {
+ Func(FuncType),
+ Instance(InstanceType<'a>),
+ Module(ModuleType<'a>),
+}
+
+#[derive(Debug, Clone, Eq, PartialEq, Hash)]
+pub struct FuncType {
+ pub params: Box<[Type]>,
+ pub returns: Box<[Type]>,
+}
+
+#[derive(Debug, Clone)]
+pub struct InstanceType<'a> {
+ pub exports: Box<[ExportType<'a>]>,
+}
+
+#[derive(Debug, Clone)]
+pub struct ModuleType<'a> {
+ pub imports: Box<[crate::Import<'a>]>,
+ pub exports: Box<[ExportType<'a>]>,
+}
+
+#[derive(Debug, Clone)]
+pub struct ExportType<'a> {
+ pub name: &'a str,
+ pub ty: ImportSectionEntryType,
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct ResizableLimits {
+ pub initial: u32,
+ pub maximum: Option<u32>,
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct ResizableLimits64 {
+ pub initial: u64,
+ pub maximum: Option<u64>,
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct TableType {
+ pub element_type: Type,
+ pub limits: ResizableLimits,
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum MemoryType {
+ M32 {
+ limits: ResizableLimits,
+ shared: bool,
+ },
+ M64 {
+ limits: ResizableLimits64,
+ shared: bool,
+ },
+}
+
+impl MemoryType {
+ pub fn index_type(&self) -> Type {
+ match self {
+ MemoryType::M32 { .. } => Type::I32,
+ MemoryType::M64 { .. } => Type::I64,
+ }
+ }
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct GlobalType {
+ pub content_type: Type,
+ pub mutable: bool,
+}
+
+#[derive(Debug, Copy, Clone)]
+pub enum ImportSectionEntryType {
+ Function(u32),
+ Table(TableType),
+ Memory(MemoryType),
+ Global(GlobalType),
+ Module(u32),
+ Instance(u32),
+}
+
+#[derive(Debug, Copy, Clone)]
+pub struct MemoryImmediate {
+ /// Alignment, stored as `n` where the actual alignment is `2^n`
+ pub align: u8,
+ pub offset: u32,
+ pub memory: u32,
+}
+
+#[derive(Debug, Copy, Clone)]
+pub struct Naming<'a> {
+ pub index: u32,
+ pub name: &'a str,
+}
+
+#[derive(Debug, Copy, Clone)]
+pub enum NameType {
+ Module,
+ Function,
+ Local,
+}
+
+#[derive(Debug, Copy, Clone)]
+pub enum LinkingType {
+ StackPointer(u32),
+}
+
+#[derive(Debug, Copy, Clone)]
+pub enum RelocType {
+ FunctionIndexLEB,
+ TableIndexSLEB,
+ TableIndexI32,
+ GlobalAddrLEB,
+ GlobalAddrSLEB,
+ GlobalAddrI32,
+ TypeIndexLEB,
+ GlobalIndexLEB,
+}
+
+/// A br_table entries representation.
+#[derive(Clone)]
+pub struct BrTable<'a> {
+ pub(crate) reader: crate::BinaryReader<'a>,
+ pub(crate) cnt: usize,
+}
+
+/// An IEEE binary32 immediate floating point value, represented as a u32
+/// containing the bitpattern.
+///
+/// All bit patterns are allowed.
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
+pub struct Ieee32(pub(crate) u32);
+
+impl Ieee32 {
+ pub fn bits(self) -> u32 {
+ self.0
+ }
+}
+
+/// An IEEE binary64 immediate floating point value, represented as a u64
+/// containing the bitpattern.
+///
+/// All bit patterns are allowed.
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
+pub struct Ieee64(pub(crate) u64);
+
+impl Ieee64 {
+ pub fn bits(self) -> u64 {
+ self.0
+ }
+}
+
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
+pub struct V128(pub(crate) [u8; 16]);
+
+impl V128 {
+ pub fn bytes(&self) -> &[u8; 16] {
+ &self.0
+ }
+}
+
+pub type SIMDLaneIndex = u8;
+
+/// Instructions as defined [here].
+///
+/// [here]: https://webassembly.github.io/spec/core/binary/instructions.html
+#[derive(Debug, Clone)]
+pub enum Operator<'a> {
+ Unreachable,
+ Nop,
+ Block { ty: TypeOrFuncType },
+ Loop { ty: TypeOrFuncType },
+ If { ty: TypeOrFuncType },
+ Else,
+ End,
+ Br { relative_depth: u32 },
+ BrIf { relative_depth: u32 },
+ BrTable { table: BrTable<'a> },
+ Return,
+ Call { function_index: u32 },
+ CallIndirect { index: u32, table_index: u32 },
+ ReturnCall { function_index: u32 },
+ ReturnCallIndirect { index: u32, table_index: u32 },
+ Drop,
+ Select,
+ TypedSelect { ty: Type },
+ LocalGet { local_index: u32 },
+ LocalSet { local_index: u32 },
+ LocalTee { local_index: u32 },
+ GlobalGet { global_index: u32 },
+ GlobalSet { global_index: u32 },
+ I32Load { memarg: MemoryImmediate },
+ I64Load { memarg: MemoryImmediate },
+ F32Load { memarg: MemoryImmediate },
+ F64Load { memarg: MemoryImmediate },
+ I32Load8S { memarg: MemoryImmediate },
+ I32Load8U { memarg: MemoryImmediate },
+ I32Load16S { memarg: MemoryImmediate },
+ I32Load16U { memarg: MemoryImmediate },
+ I64Load8S { memarg: MemoryImmediate },
+ I64Load8U { memarg: MemoryImmediate },
+ I64Load16S { memarg: MemoryImmediate },
+ I64Load16U { memarg: MemoryImmediate },
+ I64Load32S { memarg: MemoryImmediate },
+ I64Load32U { memarg: MemoryImmediate },
+ I32Store { memarg: MemoryImmediate },
+ I64Store { memarg: MemoryImmediate },
+ F32Store { memarg: MemoryImmediate },
+ F64Store { memarg: MemoryImmediate },
+ I32Store8 { memarg: MemoryImmediate },
+ I32Store16 { memarg: MemoryImmediate },
+ I64Store8 { memarg: MemoryImmediate },
+ I64Store16 { memarg: MemoryImmediate },
+ I64Store32 { memarg: MemoryImmediate },
+ MemorySize { mem: u32, mem_byte: u8 },
+ MemoryGrow { mem: u32, mem_byte: u8 },
+ I32Const { value: i32 },
+ I64Const { value: i64 },
+ F32Const { value: Ieee32 },
+ F64Const { value: Ieee64 },
+ RefNull { ty: Type },
+ RefIsNull,
+ RefFunc { function_index: u32 },
+ 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,
+ I32And,
+ I32Or,
+ I32Xor,
+ I32Shl,
+ I32ShrS,
+ I32ShrU,
+ I32Rotl,
+ I32Rotr,
+ I64Clz,
+ I64Ctz,
+ I64Popcnt,
+ I64Add,
+ I64Sub,
+ I64Mul,
+ I64DivS,
+ I64DivU,
+ I64RemS,
+ I64RemU,
+ 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,
+ I64ExtendI32S,
+ I64ExtendI32U,
+ I64TruncF32S,
+ I64TruncF32U,
+ I64TruncF64S,
+ I64TruncF64U,
+ F32ConvertI32S,
+ F32ConvertI32U,
+ F32ConvertI64S,
+ F32ConvertI64U,
+ F32DemoteF64,
+ F64ConvertI32S,
+ F64ConvertI32U,
+ F64ConvertI64S,
+ F64ConvertI64U,
+ F64PromoteF32,
+ I32ReinterpretF32,
+ I64ReinterpretF64,
+ F32ReinterpretI32,
+ F64ReinterpretI64,
+ I32Extend8S,
+ I32Extend16S,
+ I64Extend8S,
+ I64Extend16S,
+ I64Extend32S,
+
+ // 0xFC operators
+ // Non-trapping Float-to-int Conversions
+ I32TruncSatF32S,
+ I32TruncSatF32U,
+ I32TruncSatF64S,
+ I32TruncSatF64U,
+ I64TruncSatF32S,
+ I64TruncSatF32U,
+ I64TruncSatF64S,
+ I64TruncSatF64U,
+
+ // 0xFC operators
+ // bulk memory https://github.com/WebAssembly/bulk-memory-operations/blob/master/proposals/bulk-memory-operations/Overview.md
+ MemoryInit { segment: u32, mem: u32 },
+ DataDrop { segment: u32 },
+ MemoryCopy { src: u32, dst: u32 },
+ MemoryFill { mem: u32 },
+ TableInit { segment: u32, table: u32 },
+ ElemDrop { segment: u32 },
+ TableCopy { dst_table: u32, src_table: u32 },
+ TableFill { table: u32 },
+ TableGet { table: u32 },
+ TableSet { table: u32 },
+ TableGrow { table: u32 },
+ TableSize { table: u32 },
+
+ // 0xFE operators
+ // https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md
+ MemoryAtomicNotify { memarg: MemoryImmediate },
+ MemoryAtomicWait32 { memarg: MemoryImmediate },
+ MemoryAtomicWait64 { memarg: MemoryImmediate },
+ AtomicFence { flags: u8 },
+ I32AtomicLoad { memarg: MemoryImmediate },
+ I64AtomicLoad { memarg: MemoryImmediate },
+ I32AtomicLoad8U { memarg: MemoryImmediate },
+ I32AtomicLoad16U { memarg: MemoryImmediate },
+ I64AtomicLoad8U { memarg: MemoryImmediate },
+ I64AtomicLoad16U { memarg: MemoryImmediate },
+ I64AtomicLoad32U { memarg: MemoryImmediate },
+ I32AtomicStore { memarg: MemoryImmediate },
+ I64AtomicStore { memarg: MemoryImmediate },
+ I32AtomicStore8 { memarg: MemoryImmediate },
+ I32AtomicStore16 { memarg: MemoryImmediate },
+ I64AtomicStore8 { memarg: MemoryImmediate },
+ I64AtomicStore16 { memarg: MemoryImmediate },
+ I64AtomicStore32 { memarg: MemoryImmediate },
+ I32AtomicRmwAdd { memarg: MemoryImmediate },
+ I64AtomicRmwAdd { memarg: MemoryImmediate },
+ I32AtomicRmw8AddU { memarg: MemoryImmediate },
+ I32AtomicRmw16AddU { memarg: MemoryImmediate },
+ I64AtomicRmw8AddU { memarg: MemoryImmediate },
+ I64AtomicRmw16AddU { memarg: MemoryImmediate },
+ I64AtomicRmw32AddU { memarg: MemoryImmediate },
+ I32AtomicRmwSub { memarg: MemoryImmediate },
+ I64AtomicRmwSub { memarg: MemoryImmediate },
+ I32AtomicRmw8SubU { memarg: MemoryImmediate },
+ I32AtomicRmw16SubU { memarg: MemoryImmediate },
+ I64AtomicRmw8SubU { memarg: MemoryImmediate },
+ I64AtomicRmw16SubU { memarg: MemoryImmediate },
+ I64AtomicRmw32SubU { memarg: MemoryImmediate },
+ I32AtomicRmwAnd { memarg: MemoryImmediate },
+ I64AtomicRmwAnd { memarg: MemoryImmediate },
+ I32AtomicRmw8AndU { memarg: MemoryImmediate },
+ I32AtomicRmw16AndU { memarg: MemoryImmediate },
+ I64AtomicRmw8AndU { memarg: MemoryImmediate },
+ I64AtomicRmw16AndU { memarg: MemoryImmediate },
+ I64AtomicRmw32AndU { memarg: MemoryImmediate },
+ I32AtomicRmwOr { memarg: MemoryImmediate },
+ I64AtomicRmwOr { memarg: MemoryImmediate },
+ I32AtomicRmw8OrU { memarg: MemoryImmediate },
+ I32AtomicRmw16OrU { memarg: MemoryImmediate },
+ I64AtomicRmw8OrU { memarg: MemoryImmediate },
+ I64AtomicRmw16OrU { memarg: MemoryImmediate },
+ I64AtomicRmw32OrU { memarg: MemoryImmediate },
+ I32AtomicRmwXor { memarg: MemoryImmediate },
+ I64AtomicRmwXor { memarg: MemoryImmediate },
+ I32AtomicRmw8XorU { memarg: MemoryImmediate },
+ I32AtomicRmw16XorU { memarg: MemoryImmediate },
+ I64AtomicRmw8XorU { memarg: MemoryImmediate },
+ I64AtomicRmw16XorU { memarg: MemoryImmediate },
+ I64AtomicRmw32XorU { memarg: MemoryImmediate },
+ I32AtomicRmwXchg { memarg: MemoryImmediate },
+ I64AtomicRmwXchg { memarg: MemoryImmediate },
+ I32AtomicRmw8XchgU { memarg: MemoryImmediate },
+ I32AtomicRmw16XchgU { memarg: MemoryImmediate },
+ I64AtomicRmw8XchgU { memarg: MemoryImmediate },
+ I64AtomicRmw16XchgU { memarg: MemoryImmediate },
+ I64AtomicRmw32XchgU { memarg: MemoryImmediate },
+ I32AtomicRmwCmpxchg { memarg: MemoryImmediate },
+ I64AtomicRmwCmpxchg { memarg: MemoryImmediate },
+ I32AtomicRmw8CmpxchgU { memarg: MemoryImmediate },
+ I32AtomicRmw16CmpxchgU { memarg: MemoryImmediate },
+ I64AtomicRmw8CmpxchgU { memarg: MemoryImmediate },
+ I64AtomicRmw16CmpxchgU { memarg: MemoryImmediate },
+ I64AtomicRmw32CmpxchgU { memarg: MemoryImmediate },
+
+ // 0xFD operators
+ // SIMD https://github.com/WebAssembly/simd/blob/master/proposals/simd/BinarySIMD.md
+ V128Load { memarg: MemoryImmediate },
+ V128Store { memarg: MemoryImmediate },
+ V128Const { value: V128 },
+ I8x16Splat,
+ I8x16ExtractLaneS { lane: SIMDLaneIndex },
+ I8x16ExtractLaneU { lane: SIMDLaneIndex },
+ I8x16ReplaceLane { lane: SIMDLaneIndex },
+ I16x8Splat,
+ I16x8ExtractLaneS { lane: SIMDLaneIndex },
+ I16x8ExtractLaneU { lane: SIMDLaneIndex },
+ I16x8ReplaceLane { lane: SIMDLaneIndex },
+ I32x4Splat,
+ I32x4ExtractLane { lane: SIMDLaneIndex },
+ I32x4ReplaceLane { lane: SIMDLaneIndex },
+ I64x2Splat,
+ I64x2ExtractLane { lane: SIMDLaneIndex },
+ I64x2ReplaceLane { lane: SIMDLaneIndex },
+ F32x4Splat,
+ F32x4ExtractLane { lane: SIMDLaneIndex },
+ F32x4ReplaceLane { lane: SIMDLaneIndex },
+ F64x2Splat,
+ F64x2ExtractLane { lane: SIMDLaneIndex },
+ F64x2ReplaceLane { lane: SIMDLaneIndex },
+ I8x16Eq,
+ I8x16Ne,
+ I8x16LtS,
+ I8x16LtU,
+ I8x16GtS,
+ I8x16GtU,
+ I8x16LeS,
+ I8x16LeU,
+ I8x16GeS,
+ I8x16GeU,
+ I16x8Eq,
+ I16x8Ne,
+ I16x8LtS,
+ I16x8LtU,
+ I16x8GtS,
+ I16x8GtU,
+ I16x8LeS,
+ I16x8LeU,
+ I16x8GeS,
+ I16x8GeU,
+ I32x4Eq,
+ I32x4Ne,
+ I32x4LtS,
+ I32x4LtU,
+ I32x4GtS,
+ I32x4GtU,
+ I32x4LeS,
+ I32x4LeU,
+ I32x4GeS,
+ I32x4GeU,
+ F32x4Eq,
+ F32x4Ne,
+ F32x4Lt,
+ F32x4Gt,
+ F32x4Le,
+ F32x4Ge,
+ F64x2Eq,
+ F64x2Ne,
+ F64x2Lt,
+ F64x2Gt,
+ F64x2Le,
+ F64x2Ge,
+ V128Not,
+ V128And,
+ V128AndNot,
+ V128Or,
+ V128Xor,
+ V128Bitselect,
+ I8x16Abs,
+ I8x16Neg,
+ I8x16AnyTrue,
+ I8x16AllTrue,
+ I8x16Bitmask,
+ I8x16Shl,
+ I8x16ShrS,
+ I8x16ShrU,
+ I8x16Add,
+ I8x16AddSatS,
+ I8x16AddSatU,
+ I8x16Sub,
+ I8x16SubSatS,
+ I8x16SubSatU,
+ I8x16MinS,
+ I8x16MinU,
+ I8x16MaxS,
+ I8x16MaxU,
+ I16x8Abs,
+ I16x8Neg,
+ I16x8AnyTrue,
+ I16x8AllTrue,
+ I16x8Bitmask,
+ I16x8Shl,
+ I16x8ShrS,
+ I16x8ShrU,
+ I16x8Add,
+ I16x8AddSatS,
+ I16x8AddSatU,
+ I16x8Sub,
+ I16x8SubSatS,
+ I16x8SubSatU,
+ I16x8Mul,
+ I16x8MinS,
+ I16x8MinU,
+ I16x8MaxS,
+ I16x8MaxU,
+ I32x4Abs,
+ I32x4Neg,
+ I32x4AnyTrue,
+ I32x4AllTrue,
+ I32x4Bitmask,
+ I32x4Shl,
+ I32x4ShrS,
+ I32x4ShrU,
+ I32x4Add,
+ I32x4Sub,
+ I32x4Mul,
+ I32x4MinS,
+ I32x4MinU,
+ I32x4MaxS,
+ I32x4MaxU,
+ I32x4DotI16x8S,
+ I64x2Neg,
+ I64x2Shl,
+ I64x2ShrS,
+ I64x2ShrU,
+ I64x2Add,
+ I64x2Sub,
+ I64x2Mul,
+ F32x4Ceil,
+ F32x4Floor,
+ F32x4Trunc,
+ F32x4Nearest,
+ F64x2Ceil,
+ F64x2Floor,
+ F64x2Trunc,
+ F64x2Nearest,
+ F32x4Abs,
+ F32x4Neg,
+ F32x4Sqrt,
+ F32x4Add,
+ F32x4Sub,
+ F32x4Mul,
+ F32x4Div,
+ F32x4Min,
+ F32x4Max,
+ F32x4PMin,
+ F32x4PMax,
+ F64x2Abs,
+ F64x2Neg,
+ F64x2Sqrt,
+ F64x2Add,
+ F64x2Sub,
+ F64x2Mul,
+ F64x2Div,
+ F64x2Min,
+ F64x2Max,
+ F64x2PMin,
+ F64x2PMax,
+ I32x4TruncSatF32x4S,
+ I32x4TruncSatF32x4U,
+ F32x4ConvertI32x4S,
+ F32x4ConvertI32x4U,
+ I8x16Swizzle,
+ I8x16Shuffle { lanes: [SIMDLaneIndex; 16] },
+ V128Load8Splat { memarg: MemoryImmediate },
+ V128Load16Splat { memarg: MemoryImmediate },
+ V128Load32Splat { memarg: MemoryImmediate },
+ V128Load32Zero { memarg: MemoryImmediate },
+ V128Load64Splat { memarg: MemoryImmediate },
+ V128Load64Zero { memarg: MemoryImmediate },
+ I8x16NarrowI16x8S,
+ I8x16NarrowI16x8U,
+ I16x8NarrowI32x4S,
+ I16x8NarrowI32x4U,
+ I16x8WidenLowI8x16S,
+ I16x8WidenHighI8x16S,
+ I16x8WidenLowI8x16U,
+ I16x8WidenHighI8x16U,
+ I32x4WidenLowI16x8S,
+ I32x4WidenHighI16x8S,
+ I32x4WidenLowI16x8U,
+ I32x4WidenHighI16x8U,
+ V128Load8x8S { memarg: MemoryImmediate },
+ V128Load8x8U { memarg: MemoryImmediate },
+ V128Load16x4S { memarg: MemoryImmediate },
+ V128Load16x4U { memarg: MemoryImmediate },
+ V128Load32x2S { memarg: MemoryImmediate },
+ V128Load32x2U { memarg: MemoryImmediate },
+ I8x16RoundingAverageU,
+ I16x8RoundingAverageU,
+}