binaryen v89.0.0-nightly.20191217
binaryen.js
binaryen.js is a port of Binaryen to the Web, allowing you to generate WebAssembly using a JavaScript API.
Usage
$> npm install binaryenimport binaryen from "binaryen";
// Create a module with a single function
var myModule = new binaryen.Module();
myModule.addFunction("add", binaryen.createType([ binaryen.i32, binaryen.i32 ]), binaryen.i32, [ binaryen.i32 ],
  myModule.block(null, [
    myModule.local.set(2,
      myModule.i32.add(
        myModule.local.get(0, binaryen.i32),
        myModule.local.get(1, binaryen.i32)
      )
    ),
    myModule.return(
      myModule.local.get(2, binaryen.i32)
    )
  ])
);
myModule.addFunctionExport("add", "add");
// Optimize the module using default passes and levels
myModule.optimize();
// Validate the module
if (!myModule.validate())
  throw new Error("validation error");
// Generate text format and binary
var textData = myModule.emitText();
var wasmData = myModule.emitBinary();
// Example usage with the WebAssembly API
var compiled = new WebAssembly.Module(wasmData);
var instance = new WebAssembly.Instance(compiled, {});
console.log(instance.exports.add(41, 1));The buildbot also publishes nightly versions once a day if there have been changes. The latest nightly can be installed through
$> npm install binaryen@nightlyor you can use one of the previous versions instead if necessary.
Usage with a CDN
- From GitHub via jsDelivr:
https://cdn.jsdelivr.net/gh/AssemblyScript/binaryen.js@VERSION/index.js
- From npm via jsDelivr:
https://cdn.jsdelivr.net/npm/binaryen@VERSION/index.js
- From npm via unpkg: - https://unpkg.com/binaryen@VERSION/index.js- Replace - VERSIONwith a specific version or omit it (not recommended in production) to use main/latest.
Command line
The package includes Node.js builds of Binaryen's command line tools: wasm-shell, wasm-opt, wasm-metadce, wasm2js, wasm-as, wasm-dis, wasm-ctor-eval, wasm-reduce and wasm-merge.
API
Please note that the Binaryen API is evolving fast and that definitions and documentation provided by the package tend to get out of sync despite our best efforts. It's a bot after all. If you rely on binaryen.js and spot an issue, please consider sending a PR our way by updating index.d.ts and README.md to reflect the current API.
Contents
- Types
- Module construction
- Module manipulation
- Module validation
- Module optimization
- Module creation
- Expression construction- Control flow
- Variable accesses
- Integer operations
- Floating point operations
- Datatype conversions
- Function calls
- Linear memory accesses
- Host operations
- Bulk memory operations
- Sign extension operations
- Reference types operations
- Vector operations
- Multi-value operations
- Atomic memory accesses 🦄
- Atomic read-modify-write operations 🦄
- Atomic wait and notify operations 🦄
- Exception handling operations 🦄
 
- Expression manipulation
- Relooper
- Source maps
- Debugging
Future features 🦄 might not be supported by all runtimes.
Types
- none: - TypeThe none type, e.g.,- void.
- i32: - Type32-bit integer type.
- i64: - Type64-bit integer type.
- f32: - Type32-bit float type.
- f64: - Type64-bit float (double) type.
- v128: - Type128-bit vector type. 🦄
- funcref: - TypeA function reference. 🦄
- externref: - TypeAn external (host) reference. 🦄
- anyref: - TypeAny (top type) reference. 🦄
- eqref: - TypeEqual reference. 🦄
- i31ref: - Typei31 reference. 🦄
- structref: - TypeStructure reference. 🦄
- stringref: - TypeString reference. 🦄
- stringview_wtf8: - TypeView of a string reference in WTF-8 encoding. 🦄
- stringview_wtf16: - TypeView of a string reference in WTF-16 encoding. 🦄
- stringview_iter: - TypeIterator over the code points of a string reference. 🦄
- unreachable: - TypeSpecial type indicating unreachable code when obtaining information about an expression.
- auto: - TypeSpecial type used in Module#block exclusively. Lets the API figure out a block's result type automatically.
- createType(types: - Type[]):- TypeCreates a multi-value type from an array of types.
- expandType(type: - Type):- Type[]Expands a multi-value type to an array of types.
Module construction
- new Module() Constructs a new module. 
- parseText(text: - string):- ModuleCreates a module from Binaryen's s-expression text format (not official stack-style text format).
- readBinary(data: - Uint8Array):- ModuleCreates a module from binary data.
Module manipulation
- Module#addFunction(name: - string, params:- Type, results:- Type, vars:- Type[], body:- ExpressionRef):- FunctionRefAdds a function.- varsindicate additional locals, in the given order.
- Module#getFunction(name: - string):- FunctionRefGets a function, by name,
- Module#removeFunction(name: - string):- voidRemoves a function, by name.
- Module#getNumFunctions(): - numberGets the number of functions within the module.
- Module#getFunctionByIndex(index: - number):- FunctionRefGets the function at the specified index.
- Module#addFunctionImport(internalName: - string, externalModuleName:- string, externalBaseName:- string, params:- Type, results:- Type):- voidAdds a function import.
- Module#addTableImport(internalName: - string, externalModuleName:- string, externalBaseName:- string):- voidAdds a table import. There's just one table for now, using name- "0".
- Module#addMemoryImport(internalName: - string, externalModuleName:- string, externalBaseName:- string):- voidAdds a memory import. There's just one memory for now, using name- "0".
- Module#addGlobalImport(internalName: - string, externalModuleName:- string, externalBaseName:- string, globalType:- Type):- voidAdds a global variable import. Imported globals must be immutable.
- Module#addFunctionExport(internalName: - string, externalName:- string):- ExportRefAdds a function export.
- Module#addTableExport(internalName: - string, externalName:- string):- ExportRefAdds a table export. There's just one table for now, using name- "0".
- Module#addMemoryExport(internalName: - string, externalName:- string):- ExportRefAdds a memory export. There's just one memory for now, using name- "0".
- Module#addGlobalExport(internalName: - string, externalName:- string):- ExportRefAdds a global variable export. Exported globals must be immutable.
- Module#getNumExports(): - numberGets the number of exports witin the module.
- Module#getExportByIndex(index: - number):- ExportRefGets the export at the specified index.
- Module#removeExport(externalName: - string):- voidRemoves an export, by external name.
- Module#addGlobal(name: - string, type:- Type, mutable:- number, value:- ExpressionRef):- GlobalRefAdds a global instance variable.
- Module#getGlobal(name: - string):- GlobalRefGets a global, by name,
- Module#removeGlobal(name: - string):- voidRemoves a global, by name.
- Module#setMemory(initial: - number, maximum:- number, exportName:- string | null, segments:- MemorySegment[], shared?:- boolean):- voidSets the memory. There's just one memory for now, using name- "0". Providing- exportNamealso creates a memory export.- MemorySegment#offset: ExpressionRef
- MemorySegment#data: Uint8Array
- MemorySegment#passive: boolean
 
- MemorySegment#offset: 
- Module#getNumMemorySegments(): - numberGets the number of memory segments within the module.
- Module#getMemorySegmentInfoByIndex(index: - number):- MemorySegmentInfoGets information about the memory segment at the specified index.- MemorySegmentInfo#offset: number
- MemorySegmentInfo#data: Uint8Array
- MemorySegmentInfo#passive: boolean
 
- MemorySegmentInfo#offset: 
- Module#setStart(start: - FunctionRef):- voidSets the start function.
- Module#getFeatures(): - FeaturesGets the WebAssembly features enabled for this module.- Note that the return value may be a bitmask indicating multiple features. Possible feature flags are: - Features.MVP: Features
- Features.Atomics: Features
- Features.BulkMemory: Features
- Features.MutableGlobals: Features
- Features.NontrappingFPToInt: Features
- Features.SignExt: Features
- Features.SIMD128: Features
- Features.ExceptionHandling: Features
- Features.TailCall: Features
- Features.ReferenceTypes: Features
- Features.Multivalue: Features
- Features.All: Features
 
- Features.MVP: 
- Module#setFeatures(features: - Features):- voidSets the WebAssembly features enabled for this module.
- Module#addCustomSection(name: - string, contents:- Uint8Array):- voidAdds a custom section to the binary.
- Module#autoDrop(): - voidEnables automatic insertion of- dropoperations where needed. Lets you not worry about dropping when creating your code.
- getFunctionInfo(ftype: - FunctionRef:- FunctionInfoObtains information about a function.- FunctionInfo#name: string
- FunctionInfo#module: string | null(if imported)
- FunctionInfo#base: string | null(if imported)
- FunctionInfo#params: Type
- FunctionInfo#results: Type
- FunctionInfo#vars: Type
- FunctionInfo#body: ExpressionRef
 
- FunctionInfo#name: 
- getGlobalInfo(global: - GlobalRef):- GlobalInfoObtains information about a global.- GlobalInfo#name: string
- GlobalInfo#module: string | null(if imported)
- GlobalInfo#base: string | null(if imported)
- GlobalInfo#type: Type
- GlobalInfo#mutable: boolean
- GlobalInfo#init: ExpressionRef
 
- GlobalInfo#name: 
- getTableInfo(table: - TableRef):- TableInfoObtains information about a table.- TableInfo#name: string
- TableInfo#module: string | null(if imported)
- TableInfo#base: string | null(if imported)
- TableInfo#initial: number;
- TableInfo#max?: number;
 
- TableInfo#name: 
- getExportInfo(export_: - ExportRef):- ExportInfoObtains information about an export.- ExportInfo#kind: ExternalKind
- ExportInfo#name: string
- ExportInfo#value: string
 - Possible - ExternalKindvalues are:- ExternalFunction: ExternalKind
- ExternalTable: ExternalKind
- ExternalMemory: ExternalKind
- ExternalGlobal: ExternalKind
- ExternalTag: ExternalKind
 
- ExportInfo#kind: 
- getTagInfo(tag: - TagRef):- TagInfoObtains information about a tag.- TagInfo#name: string
- TagInfo#module: string | null(if imported)
- TagInfo#base: string | null(if imported)
- TagInfo#params: Type
- TagInfo#results: Type
 
- TagInfo#name: 
- getSideEffects(expr: - ExpressionRef, features:- FeatureFlags):- SideEffectsGets the side effects of the specified expression.- SideEffects.None: SideEffects
- SideEffects.Branches: SideEffects
- SideEffects.Calls: SideEffects
- SideEffects.ReadsLocal: SideEffects
- SideEffects.WritesLocal: SideEffects
- SideEffects.ReadsGlobal: SideEffects
- SideEffects.WritesGlobal: SideEffects
- SideEffects.ReadsMemory: SideEffects
- SideEffects.WritesMemory: SideEffects
- SideEffects.ReadsTable: SideEffects
- SideEffects.WritesTable: SideEffects
- SideEffects.ImplicitTrap: SideEffects
- SideEffects.IsAtomic: SideEffects
- SideEffects.Throws: SideEffects
- SideEffects.DanglingPop: SideEffects
- SideEffects.TrapsNeverHappen: SideEffects
- SideEffects.Any: SideEffects
 
- SideEffects.None: 
Module validation
- Module#validate(): booleanValidates the module. Returnstrueif valid, otherwise prints validation errors and returnsfalse.
Module optimization
- Module#optimize(): - voidOptimizes the module using the default optimization passes.
- Module#optimizeFunction(func: - FunctionRef | string):- voidOptimizes a single function using the default optimization passes.
- Module#runPasses(passes: - string[]):- voidRuns the specified passes on the module.
- Module#runPassesOnFunction(func: - FunctionRef | string, passes:- string[]):- voidRuns the specified passes on a single function.
- getOptimizeLevel(): - numberGets the currently set optimize level.- 0,- 1,- 2correspond to- -O0,- -O1,- -O2(default), etc.
- setOptimizeLevel(level: - number):- voidSets the optimization level to use.- 0,- 1,- 2correspond to- -O0,- -O1,- -O2(default), etc.
- getShrinkLevel(): - numberGets the currently set shrink level.- 0,- 1,- 2correspond to- -O0,- -Os(default),- -Oz.
- setShrinkLevel(level: - number):- voidSets the shrink level to use.- 0,- 1,- 2correspond to- -O0,- -Os(default),- -Oz.
- getDebugInfo(): - booleanGets whether generating debug information is currently enabled or not.
- setDebugInfo(on: - boolean):- voidEnables or disables debug information in emitted binaries.
- getLowMemoryUnused(): - booleanGets whether the low 1K of memory can be considered unused when optimizing.
- setLowMemoryUnused(on: - boolean):- voidEnables or disables whether the low 1K of memory can be considered unused when optimizing.
- getPassArgument(key: - string):- string | nullGets the value of the specified arbitrary pass argument.
- setPassArgument(key: - string, value:- string | null):- voidSets the value of the specified arbitrary pass argument. Removes the respective argument if- valueis- null.
- clearPassArguments(): - voidClears all arbitrary pass arguments.
- getAlwaysInlineMaxSize(): - numberGets the function size at which we always inline.
- setAlwaysInlineMaxSize(size: - number):- voidSets the function size at which we always inline.
- getFlexibleInlineMaxSize(): - numberGets the function size which we inline when functions are lightweight.
- setFlexibleInlineMaxSize(size: - number):- voidSets the function size which we inline when functions are lightweight.
- getOneCallerInlineMaxSize(): - numberGets the function size which we inline when there is only one caller.
- setOneCallerInlineMaxSize(size: - number):- voidSets the function size which we inline when there is only one caller.
Module creation
- Module#emitBinary(): - Uint8ArrayReturns the module in binary format.
- Module#emitBinary(sourceMapUrl: - string | null):- BinaryWithSourceMapReturns the module in binary format with its source map. If- sourceMapUrlis- null, source map generation is skipped.- BinaryWithSourceMap#binary: Uint8Array
- BinaryWithSourceMap#sourceMap: string | null
 
- BinaryWithSourceMap#binary: 
- Module#emitText(): - stringReturns the module in Binaryen's s-expression text format (not official stack-style text format).
- Module#emitStackIR(optimize?: - boolean):- stringReturns the module in official stack-style text format.
- Module#emitAsmjs(): - stringReturns the asm.js representation of the module.
- Module#dispose(): - voidReleases the resources held by the module once it isn't needed anymore.
Expression construction
Control flow
- Module#block(label: - string | null, children:- ExpressionRef[], resultType?:- Type):- ExpressionRefCreates a block.- resultTypedefaults to- none.
- Module#if(condition: - ExpressionRef, ifTrue:- ExpressionRef, ifFalse?:- ExpressionRef):- ExpressionRefCreates an if or if/else combination.
- Module#loop(label: - string | null, body:- ExpressionRef):- ExpressionRefCreates a loop.
- Module#br(label: - string, condition?:- ExpressionRef, value?:- ExpressionRef):- ExpressionRefCreates a branch (br) to a label.
- Module#switch(labels: - string[], defaultLabel:- string, condition:- ExpressionRef, value?:- ExpressionRef):- ExpressionRefCreates a switch (br_table).
- Module#nop(): - ExpressionRefCreates a no-operation (nop) instruction.
- Module#return(value?: - ExpressionRef):- ExpressionRefCreates a return.
- Module#unreachable(): - ExpressionRefCreates an unreachable instruction that will always trap.
- Module#drop(value: - ExpressionRef):- ExpressionRefCreates a drop of a value.
- Module#select(condition: - ExpressionRef, ifTrue:- ExpressionRef, ifFalse:- ExpressionRef, type?:- Type):- ExpressionRefCreates a select of one of two values.
Variable accesses
- Module#local.get(index: - number, type:- Type):- ExpressionRefCreates a local.get for the local at the specified index. Note that we must specify the type here as we may not have created the local being accessed yet.
- Module#local.set(index: - number, value:- ExpressionRef):- ExpressionRefCreates a local.set for the local at the specified index.
- Module#local.tee(index: - number, value:- ExpressionRef, type:- Type):- ExpressionRefCreates a local.tee for the local at the specified index. A tee differs from a set in that the value remains on the stack. Note that we must specify the type here as we may not have created the local being accessed yet.
- Module#global.get(name: - string, type:- Type):- ExpressionRefCreates a global.get for the global with the specified name. Note that we must specify the type here as we may not have created the global being accessed yet.
- Module#global.set(name: - string, value:- ExpressionRef):- ExpressionRefCreates a global.set for the global with the specified name.
Integer operations
- Module#i32.const(value: number):ExpressionRef
- Module#i32.clz(value: ExpressionRef):ExpressionRef
- Module#i32.ctz(value: ExpressionRef):ExpressionRef
- Module#i32.popcnt(value: ExpressionRef):ExpressionRef
- Module#i32.eqz(value: ExpressionRef):ExpressionRef
- Module#i32.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.div_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.div_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.rem_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.rem_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.and(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.or(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.xor(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.shl(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.shr_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.shr_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.rotl(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.rotr(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.lt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.le_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.le_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.gt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.gt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.ge_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32.ge_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.const(low: number, high:number):ExpressionRef
- Module#i64.clz(value: ExpressionRef):ExpressionRef
- Module#i64.ctz(value: ExpressionRef):ExpressionRef
- Module#i64.popcnt(value: ExpressionRef):ExpressionRef
- Module#i64.eqz(value: ExpressionRef):ExpressionRef
- Module#i64.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.div_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.div_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.rem_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.rem_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.and(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.or(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.xor(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.shl(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.shr_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.shr_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.rotl(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.rotr(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.lt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.le_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.le_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.gt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.gt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.ge_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64.ge_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
Floating point operations
- Module#f32.const(value: number):ExpressionRef
- Module#f32.const_bits(value: number):ExpressionRef
- Module#f32.neg(value: ExpressionRef):ExpressionRef
- Module#f32.abs(value: ExpressionRef):ExpressionRef
- Module#f32.ceil(value: ExpressionRef):ExpressionRef
- Module#f32.floor(value: ExpressionRef):ExpressionRef
- Module#f32.trunc(value: ExpressionRef):ExpressionRef
- Module#f32.nearest(value: ExpressionRef):ExpressionRef
- Module#f32.sqrt(value: ExpressionRef):ExpressionRef
- Module#f32.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.div(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.copysign(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.min(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.max(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.lt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.le(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.gt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32.ge(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.const(value: number):ExpressionRef
- Module#f64.const_bits(value: number):ExpressionRef
- Module#f64.neg(value: ExpressionRef):ExpressionRef
- Module#f64.abs(value: ExpressionRef):ExpressionRef
- Module#f64.ceil(value: ExpressionRef):ExpressionRef
- Module#f64.floor(value: ExpressionRef):ExpressionRef
- Module#f64.trunc(value: ExpressionRef):ExpressionRef
- Module#f64.nearest(value: ExpressionRef):ExpressionRef
- Module#f64.sqrt(value: ExpressionRef):ExpressionRef
- Module#f64.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.div(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.copysign(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.min(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.max(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.lt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.le(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.gt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64.ge(left: ExpressionRef, right:ExpressionRef):ExpressionRef
Datatype conversions
- Module#i32.trunc_s.f32(value: ExpressionRef):ExpressionRef
- Module#i32.trunc_s.f64(value: ExpressionRef):ExpressionRef
- Module#i32.trunc_u.f32(value: ExpressionRef):ExpressionRef
- Module#i32.trunc_u.f64(value: ExpressionRef):ExpressionRef
- Module#i32.reinterpret(value: ExpressionRef):ExpressionRef
- Module#i32.wrap(value: ExpressionRef):ExpressionRef
- Module#i64.trunc_s.f32(value: ExpressionRef):ExpressionRef
- Module#i64.trunc_s.f64(value: ExpressionRef):ExpressionRef
- Module#i64.trunc_u.f32(value: ExpressionRef):ExpressionRef
- Module#i64.trunc_u.f64(value: ExpressionRef):ExpressionRef
- Module#i64.reinterpret(value: ExpressionRef):ExpressionRef
- Module#i64.extend_s(value: ExpressionRef):ExpressionRef
- Module#i64.extend_u(value: ExpressionRef):ExpressionRef
- Module#f32.reinterpret(value: ExpressionRef):ExpressionRef
- Module#f32.convert_s.i32(value: ExpressionRef):ExpressionRef
- Module#f32.convert_s.i64(value: ExpressionRef):ExpressionRef
- Module#f32.convert_u.i32(value: ExpressionRef):ExpressionRef
- Module#f32.convert_u.i64(value: ExpressionRef):ExpressionRef
- Module#f32.demote(value: ExpressionRef):ExpressionRef
- Module#f64.reinterpret(value: ExpressionRef):ExpressionRef
- Module#f64.convert_s.i32(value: ExpressionRef):ExpressionRef
- Module#f64.convert_s.i64(value: ExpressionRef):ExpressionRef
- Module#f64.convert_u.i32(value: ExpressionRef):ExpressionRef
- Module#f64.convert_u.i64(value: ExpressionRef):ExpressionRef
- Module#f64.promote(value: ExpressionRef):ExpressionRef
Function calls
- Module#call(name: - string, operands:- ExpressionRef[], returnType:- Type):- ExpressionRefCreates a call to a function. Note that we must specify the return type here as we may not have created the function being called yet.
- Module#return_call(name: - string, operands:- ExpressionRef[], returnType:- Type):- ExpressionRefLike call, but creates a tail-call. 🦄
- Module#call_indirect(target: - ExpressionRef, operands:- ExpressionRef[], params:- Type, results:- Type):- ExpressionRefSimilar to call, but calls indirectly, i.e., via a function pointer, so an expression replaces the name as the called value.
- Module#return_call_indirect(target: - ExpressionRef, operands:- ExpressionRef[], params:- Type, results:- Type):- ExpressionRefLike call_indirect, but creates a tail-call. 🦄
Linear memory accesses
- Module#i32.load(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32.load8_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32.load8_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32.load16_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32.load16_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32.store(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.store8(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.store16(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.load(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load8_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load8_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load16_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load16_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load32_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.load32_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64.store(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.store8(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.store16(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.store32(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#f32.load(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#f32.store(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#f64.load(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#f64.store(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
Host operations
- Module#memory.size(): ExpressionRef
- Module#memory.grow(value: number):ExpressionRef
Vector operations 🦄
- Module#v128.const(bytes: Uint8Array):ExpressionRef
- Module#v128.load(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#v128.store(offset: number, align:number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#v128.not(value: ExpressionRef):ExpressionRef
- Module#v128.and(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#v128.or(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#v128.xor(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#v128.andnot(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#v128.bitselect(left: ExpressionRef, right:ExpressionRef, cond:ExpressionRef):ExpressionRef
- Module#i8x16.splat(value: ExpressionRef):ExpressionRef
- Module#i8x16.extract_lane_s(vec: ExpressionRef, index:number):ExpressionRef
- Module#i8x16.extract_lane_u(vec: ExpressionRef, index:number):ExpressionRef
- Module#i8x16.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#i8x16.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.lt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.gt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.gt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.le_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.ge_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.ge_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.neg(value: ExpressionRef):ExpressionRef
- Module#i8x16.any_true(value: ExpressionRef):ExpressionRef
- Module#i8x16.all_true(value: ExpressionRef):ExpressionRef
- Module#i8x16.shl(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i8x16.shr_s(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i8x16.shr_u(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i8x16.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.add_saturate_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.add_saturate_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.sub_saturate_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.sub_saturate_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.min_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.min_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.max_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.max_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.avgr_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.narrow_i16x8_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i8x16.narrow_i16x8_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.splat(value: ExpressionRef):ExpressionRef
- Module#i16x8.extract_lane_s(vec: ExpressionRef, index:number):ExpressionRef
- Module#i16x8.extract_lane_u(vec: ExpressionRef, index:number):ExpressionRef
- Module#i16x8.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#i16x8.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.lt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.gt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.gt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.le_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.ge_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.ge_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.neg(value: ExpressionRef):ExpressionRef
- Module#i16x8.any_true(value: ExpressionRef):ExpressionRef
- Module#i16x8.all_true(value: ExpressionRef):ExpressionRef
- Module#i16x8.shl(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i16x8.shr_s(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i16x8.shr_u(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i16x8.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.add_saturate_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.add_saturate_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.sub_saturate_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.sub_saturate_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.min_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.min_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.max_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.max_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.avgr_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.narrow_i32x4_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.narrow_i32x4_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i16x8.widen_low_i8x16_s(value: ExpressionRef):ExpressionRef
- Module#i16x8.widen_high_i8x16_s(value: ExpressionRef):ExpressionRef
- Module#i16x8.widen_low_i8x16_u(value: ExpressionRef):ExpressionRef
- Module#i16x8.widen_high_i8x16_u(value: ExpressionRef):ExpressionRef
- Module#i16x8.load8x8_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i16x8.load8x8_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32x4.splat(value: ExpressionRef):ExpressionRef
- Module#i32x4.extract_lane_s(vec: ExpressionRef, index:number):ExpressionRef
- Module#i32x4.extract_lane_u(vec: ExpressionRef, index:number):ExpressionRef
- Module#i32x4.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#i32x4.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.lt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.gt_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.gt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.le_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.lt_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.ge_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.ge_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.neg(value: ExpressionRef):ExpressionRef
- Module#i32x4.any_true(value: ExpressionRef):ExpressionRef
- Module#i32x4.all_true(value: ExpressionRef):ExpressionRef
- Module#i32x4.shl(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i32x4.shr_s(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i32x4.shr_u(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i32x4.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.min_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.min_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.max_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.max_u(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.dot_i16x8_s(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i32x4.trunc_sat_f32x4_s(value: ExpressionRef):ExpressionRef
- Module#i32x4.trunc_sat_f32x4_u(value: ExpressionRef):ExpressionRef
- Module#i32x4.widen_low_i16x8_s(value: ExpressionRef):ExpressionRef
- Module#i32x4.widen_high_i16x8_s(value: ExpressionRef):ExpressionRef
- Module#i32x4.widen_low_i16x8_u(value: ExpressionRef):ExpressionRef
- Module#i32x4.widen_high_i16x8_u(value: ExpressionRef):ExpressionRef
- Module#i32x4.load16x4_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i32x4.load16x4_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64x2.splat(value: ExpressionRef):ExpressionRef
- Module#i64x2.extract_lane_s(vec: ExpressionRef, index:number):ExpressionRef
- Module#i64x2.extract_lane_u(vec: ExpressionRef, index:number):ExpressionRef
- Module#i64x2.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#i64x2.neg(value: ExpressionRef):ExpressionRef
- Module#i64x2.any_true(value: ExpressionRef):ExpressionRef
- Module#i64x2.all_true(value: ExpressionRef):ExpressionRef
- Module#i64x2.shl(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i64x2.shr_s(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i64x2.shr_u(vec: ExpressionRef, shift:ExpressionRef):ExpressionRef
- Module#i64x2.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64x2.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#i64x2.trunc_sat_f64x2_s(value: ExpressionRef):ExpressionRef
- Module#i64x2.trunc_sat_f64x2_u(value: ExpressionRef):ExpressionRef
- Module#i64x2.load32x2_s(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#i64x2.load32x2_u(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#f32x4.splat(value: ExpressionRef):ExpressionRef
- Module#f32x4.extract_lane(vec: ExpressionRef, index:number):ExpressionRef
- Module#f32x4.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#f32x4.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.lt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.gt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.le(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.ge(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.abs(value: ExpressionRef):ExpressionRef
- Module#f32x4.neg(value: ExpressionRef):ExpressionRef
- Module#f32x4.sqrt(value: ExpressionRef):ExpressionRef
- Module#f32x4.qfma(a: ExpressionRef, b:ExpressionRef, c:ExpressionRef):ExpressionRef
- Module#f32x4.qfms(a: ExpressionRef, b:ExpressionRef, c:ExpressionRef):ExpressionRef
- Module#f32x4.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.div(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.min(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.max(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f32x4.convert_i32x4_s(value: ExpressionRef):ExpressionRef
- Module#f32x4.convert_i32x4_u(value: ExpressionRef):ExpressionRef
- Module#f64x2.splat(value: ExpressionRef):ExpressionRef
- Module#f64x2.extract_lane(vec: ExpressionRef, index:number):ExpressionRef
- Module#f64x2.replace_lane(vec: ExpressionRef, index:number, value:ExpressionRef):ExpressionRef
- Module#f64x2.eq(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.ne(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.lt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.gt(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.le(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.ge(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.abs(value: ExpressionRef):ExpressionRef
- Module#f64x2.neg(value: ExpressionRef):ExpressionRef
- Module#f64x2.sqrt(value: ExpressionRef):ExpressionRef
- Module#f64x2.qfma(a: ExpressionRef, b:ExpressionRef, c:ExpressionRef):ExpressionRef
- Module#f64x2.qfms(a: ExpressionRef, b:ExpressionRef, c:ExpressionRef):ExpressionRef
- Module#f64x2.add(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.sub(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.mul(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.div(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.min(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.max(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#f64x2.convert_i64x2_s(value: ExpressionRef):ExpressionRef
- Module#f64x2.convert_i64x2_u(value: ExpressionRef):ExpressionRef
- Module#v8x16.shuffle(left: ExpressionRef, right:ExpressionRef, mask:Uint8Array):ExpressionRef
- Module#v8x16.swizzle(left: ExpressionRef, right:ExpressionRef):ExpressionRef
- Module#v8x16.load_splat(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#v16x8.load_splat(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#v32x4.load_splat(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
- Module#v64x2.load_splat(offset: number, align:number, ptr:ExpressionRef):ExpressionRef
Atomic memory accesses 🦄
- Module#i32.atomic.load(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i32.atomic.load8_u(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i32.atomic.load16_u(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i32.atomic.store(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.store8(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.store16(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.load(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i64.atomic.load8_u(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i64.atomic.load16_u(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i64.atomic.load32_u(offset: number, ptr:ExpressionRef):ExpressionRef
- Module#i64.atomic.store(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.store8(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.store16(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.store32(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
Atomic read-modify-write operations 🦄
- Module#i32.atomic.rmw.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw8_u.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i32.atomic.rmw16_u.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw8_u.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw16_u.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.add(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.sub(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.and(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.or(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.xor(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.xchg(offset: number, ptr:ExpressionRef, value:ExpressionRef):ExpressionRef
- Module#i64.atomic.rmw32_u.cmpxchg(offset: number, ptr:ExpressionRef, expected:ExpressionRef, replacement:ExpressionRef):ExpressionRef
Atomic wait and notify operations 🦄
- Module#memory.atomic.wait32(ptr: ExpressionRef, expected:ExpressionRef, timeout:ExpressionRef):ExpressionRef
- Module#memory.atomic.wait64(ptr: ExpressionRef, expected:ExpressionRef, timeout:ExpressionRef):ExpressionRef
- Module#memoryatomic.notify(ptr: ExpressionRef, notifyCount:ExpressionRef):ExpressionRef
- Module#atomic.fence(): ExpressionRef
Sign extension operations 🦄
- Module#i32.extend8_s(value: ExpressionRef):ExpressionRef
- Module#i32.extend16_s(value: ExpressionRef):ExpressionRef
- Module#i64.extend8_s(value: ExpressionRef):ExpressionRef
- Module#i64.extend16_s(value: ExpressionRef):ExpressionRef
- Module#i64.extend32_s(value: ExpressionRef):ExpressionRef
Multi-value operations 🦄
Note that these are pseudo instructions enabling Binaryen to reason about multiple values on the stack.
- Module#push(value: ExpressionRef):ExpressionRef
- Module#i32.pop(): ExpressionRef
- Module#i64.pop(): ExpressionRef
- Module#f32.pop(): ExpressionRef
- Module#f64.pop(): ExpressionRef
- Module#v128.pop(): ExpressionRef
- Module#funcref.pop(): ExpressionRef
- Module#anyref.pop(): ExpressionRef
- Module#externref.pop(): ExpressionRef
- Module#tuple.make(elements: ExpressionRef[]):ExpressionRef
- Module#tuple.extract(tuple: ExpressionRef, index:number):ExpressionRef
Exception handling operations 🦄
- Module#try(name: string, body:ExpressionRef, catchTags:string[], catchBodies:ExpressionRef[], delegateTarget?:string):ExpressionRef
- Module#throw(tag: string, operands:ExpressionRef[]):ExpressionRef
- Module#rethrow(target: string):ExpressionRef
- Module#addTag(name: string, params:Type, results:Type):TagRef
- Module#getTag(name: string):TagRef
- Module#removeTag(name: stirng):void
- Module#addTagImport(internalName: string, externalModuleName:string, externalBaseName:string, params:Type, results:Type):void
- Module#addTagExport(internalName: string, externalName:string):ExportRef
Reference types operations 🦄
- Module#ref.null(): ExpressionRef
- Module#ref.is_null(value: ExpressionRef):ExpressionRef
- Module#ref.func(name: string):ExpressionRef
Bulk memory operations 🦄
- Module#memory.init(segment: string, dest:ExpressionRef, offset:ExpressionRef, size:ExpressionRef):ExpressionRef
- Module#memory.copy(dest: ExpressionRef, source:ExpressionRef, size:ExpressionRef):ExpressionRef
- Module#memory.fill(dest: ExpressionRef, value:ExpressionRef, size:ExpressionRef):ExpressionRef
- Module#data.drop(segment: string):ExpressionRef
Expression manipulation
- getExpressionId(expr: - ExpressionRef):- ExpressionIdGets the id (kind) of the specified expression. Possible values are:- InvalidId: ExpressionId
- BlockId: ExpressionId
- IfId: ExpressionId
- LoopId: ExpressionId
- BreakId: ExpressionId
- SwitchId: ExpressionId
- CallId: ExpressionId
- CallIndirectId: ExpressionId
- LocalGetId: ExpressionId
- LocalSetId: ExpressionId
- GlobalGetId: ExpressionId
- GlobalSetId: ExpressionId
- LoadId: ExpressionId
- StoreId: ExpressionId
- ConstId: ExpressionId
- UnaryId: ExpressionId
- BinaryId: ExpressionId
- SelectId: ExpressionId
- DropId: ExpressionId
- ReturnId: ExpressionId
- NopId: ExpressionId
- UnreachableId: ExpressionId
- AtomicCmpxchgId: ExpressionId
- AtomicRMWId: ExpressionId
- AtomicWaitId: ExpressionId
- AtomicNotifyId: ExpressionId
- AtomicFenceId: ExpressionId
- SIMDExtractId: ExpressionId
- SIMDReplaceId: ExpressionId
- SIMDShuffleId: ExpressionId
- SIMDTernaryId: ExpressionId
- SIMDShiftId: ExpressionId
- SIMDLoadId: ExpressionId
- MemoryInitId: ExpressionId
- DataDropId: ExpressionId
- MemoryCopyId: ExpressionId
- MemoryFillId: ExpressionId
- RefNullId: ExpressionId
- RefIsNullId: ExpressionId
- RefFuncId: ExpressionId
- TryId: ExpressionId
- ThrowId: ExpressionId
- RethrowId: ExpressionId
- PushId: ExpressionId
- PopId: ExpressionId
 
- InvalidId: 
- getExpressionType(expr: - ExpressionRef):- TypeGets the type of the specified expression.
- getExpressionInfo(expr: - ExpressionRef):- ExpressionInfoObtains information about an expression, always including:- Info#id: ExpressionId
- Info#type: Type
 - Additional properties depend on the expression's - idand are usually equivalent to the respective parameters when creating such an expression:- BlockInfo#name: string
- BlockInfo#children: ExpressionRef[]
- IfInfo#condition: ExpressionRef
- IfInfo#ifTrue: ExpressionRef
- IfInfo#ifFalse: ExpressionRef | null
- LoopInfo#name: string
- LoopInfo#body: ExpressionRef
- BreakInfo#name: string
- BreakInfo#condition: ExpressionRef | null
- BreakInfo#value: ExpressionRef | null
- SwitchInfo#names: string[]
- SwitchInfo#defaultName: string | null
- SwitchInfo#condition: ExpressionRef
- SwitchInfo#value: ExpressionRef | null
- CallInfo#target: string
- CallInfo#operands: ExpressionRef[]
- CallImportInfo#target: string
- CallImportInfo#operands: ExpressionRef[]
- CallIndirectInfo#target: ExpressionRef
- CallIndirectInfo#operands: ExpressionRef[]
- LocalGetInfo#index: number
- LocalSetInfo#isTee: boolean
- LocalS
 
- Info#id: 
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
11 months ago
10 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
11 months ago
11 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago