binaryen v122.0.0
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.jsReplace
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". ProvidingexportNamealso 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 ofdropoperations 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 ifvalueisnull.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. IfsourceMapUrlisnull, 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 tonone.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:
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
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
1 year 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
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
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
2 years ago
3 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
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
3 years ago
2 years ago
2 years ago
2 years ago
3 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
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 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
3 years ago
3 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
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
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
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
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
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
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
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
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
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
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
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago